phpBB
Statistics
| Revision:

root / branches / phpBB-3_0_0 / phpBB / posting.php

History | View | Annotate | Download (59.4 kB)

1 2 thefinn
<?php
2 7736 acydburn
/**
3 5114 acydburn
*
4 5114 acydburn
* @package phpBB3
5 5114 acydburn
* @version $Id$
6 7736 acydburn
* @copyright (c) 2005 phpBB Group
7 7736 acydburn
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
8 5114 acydburn
*
9 5114 acydburn
*/
10 2 thefinn
11 5114 acydburn
/**
12 5883 acydburn
* @ignore
13 5114 acydburn
*/
14 4767 acydburn
define('IN_PHPBB', true);
15 7954 acydburn
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
16 4473 psotfx
$phpEx = substr(strrchr(__FILE__, '.'), 1);
17 6015 acydburn
include($phpbb_root_path . 'common.' . $phpEx);
18 6015 acydburn
include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
19 5247 acydburn
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
20 6015 acydburn
include($phpbb_root_path . 'includes/message_parser.' . $phpEx);
21 169 thefinn
22 4167 psotfx
23 2972 psotfx
// Start session management
24 5247 acydburn
$user->session_begin();
25 2972 psotfx
$auth->acl($user->data);
26 2972 psotfx
27 4167 psotfx
28 3354 psotfx
// Grab only parameters needed here
29 4539 acydburn
$post_id        = request_var('p', 0);
30 4539 acydburn
$topic_id        = request_var('t', 0);
31 4539 acydburn
$forum_id        = request_var('f', 0);
32 4668 acydburn
$draft_id        = request_var('d', 0);
33 4539 acydburn
$lastclick        = request_var('lastclick', 0);
34 3354 psotfx
35 5902 acydburn
$submit                = (isset($_POST['post'])) ? true : false;
36 5902 acydburn
$preview        = (isset($_POST['preview'])) ? true : false;
37 5902 acydburn
$save                = (isset($_POST['save'])) ? true : false;
38 5902 acydburn
$load                = (isset($_POST['load'])) ? true : false;
39 5902 acydburn
$delete                = (isset($_POST['delete'])) ? true : false;
40 5967 acydburn
$cancel                = (isset($_POST['cancel']) && !isset($_POST['save'])) ? true : false;
41 3553 acydburn
42 9981 acydburn
$refresh        = (isset($_POST['add_file']) || isset($_POST['delete_file']) || isset($_POST['full_editor']) || isset($_POST['cancel_unglobalise']) || $save || $load) ? true : false;
43 4767 acydburn
$mode                = ($delete && !$preview && !$refresh && $submit) ? 'delete' : request_var('mode', '');
44 3631 acydburn
45 5902 acydburn
$error = $post_data = array();
46 4620 psotfx
$current_time = time();
47 4170 psotfx
48 2958 psotfx
// Was cancel pressed? If so then redirect to the appropriate page
49 4890 acydburn
if ($cancel || ($current_time - $lastclick < 2 && $submit))
50 378 psotfx
{
51 9406 terrafrost
        $f = ($forum_id) ? 'f=' . $forum_id . '&amp;' : '';
52 9406 terrafrost
        $redirect = ($post_id) ? append_sid("{$phpbb_root_path}viewtopic.$phpEx", $f . 'p=' . $post_id) . '#p' . $post_id : (($topic_id) ? append_sid("{$phpbb_root_path}viewtopic.$phpEx", $f . 't=' . $topic_id) : (($forum_id) ? append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id) : append_sid("{$phpbb_root_path}index.$phpEx")));
53 2958 psotfx
        redirect($redirect);
54 378 psotfx
}
55 378 psotfx
56 5678 acydburn
if (in_array($mode, array('post', 'reply', 'quote', 'edit', 'delete')) && !$forum_id)
57 4460 acydburn
{
58 4575 acydburn
        trigger_error('NO_FORUM');
59 4460 acydburn
}
60 4460 acydburn
61 6015 acydburn
// We need to know some basic information in all cases before we do anything.
62 3354 psotfx
switch ($mode)
63 2183 psotfx
{
64 2972 psotfx
        case 'post':
65 4139 acydburn
                $sql = 'SELECT *
66 4139 acydburn
                        FROM ' . FORUMS_TABLE . "
67 4139 acydburn
                        WHERE forum_id = $forum_id";
68 5486 acydburn
        break;
69 2983 psotfx
70 4614 acydburn
        case 'bump':
71 2923 psotfx
        case 'reply':
72 3543 acydburn
                if (!$topic_id)
73 582 psotfx
                {
74 4575 acydburn
                        trigger_error('NO_TOPIC');
75 2183 psotfx
                }
76 824 psotfx
77 9499 acydburn
                // Force forum id
78 9499 acydburn
                $sql = 'SELECT forum_id
79 9499 acydburn
                        FROM ' . TOPICS_TABLE . '
80 9499 acydburn
                        WHERE topic_id = ' . $topic_id;
81 9499 acydburn
                $result = $db->sql_query($sql);
82 9499 acydburn
                $f_id = (int) $db->sql_fetchfield('forum_id');
83 9499 acydburn
                $db->sql_freeresult($result);
84 9499 acydburn
85 9499 acydburn
                $forum_id = (!$f_id) ? $forum_id : $f_id;
86 9499 acydburn
87 4968 acydburn
                $sql = 'SELECT f.*, t.*
88 4139 acydburn
                        FROM ' . TOPICS_TABLE . ' t, ' . FORUMS_TABLE . " f
89 4139 acydburn
                        WHERE t.topic_id = $topic_id
90 4970 psotfx
                                AND (f.forum_id = t.forum_id
91 10253 acydburn
                                        OR f.forum_id = $forum_id)" .
92 10253 acydburn
                        (($auth->acl_get('m_approve', $forum_id)) ? '' : 'AND t.topic_approved = 1');
93 5486 acydburn
        break;
94 4970 psotfx
95 2923 psotfx
        case 'quote':
96 2972 psotfx
        case 'edit':
97 2923 psotfx
        case 'delete':
98 3543 acydburn
                if (!$post_id)
99 2383 psotfx
                {
100 7356 davidmj
                        $user->setup('posting');
101 4575 acydburn
                        trigger_error('NO_POST');
102 2383 psotfx
                }
103 2305 psotfx
104 9499 acydburn
                // Force forum id
105 9499 acydburn
                $sql = 'SELECT forum_id
106 9499 acydburn
                        FROM ' . POSTS_TABLE . '
107 9499 acydburn
                        WHERE post_id = ' . $post_id;
108 9499 acydburn
                $result = $db->sql_query($sql);
109 9499 acydburn
                $f_id = (int) $db->sql_fetchfield('forum_id');
110 9499 acydburn
                $db->sql_freeresult($result);
111 9499 acydburn
112 9499 acydburn
                $forum_id = (!$f_id) ? $forum_id : $f_id;
113 9499 acydburn
114 6698 acydburn
                $sql = 'SELECT f.*, t.*, p.*, u.username, u.username_clean, u.user_sig, u.user_sig_bbcode_uid, u.user_sig_bbcode_bitfield
115 4139 acydburn
                        FROM ' . POSTS_TABLE . ' p, ' . TOPICS_TABLE . ' t, ' . FORUMS_TABLE . ' f, ' . USERS_TABLE . " u
116 4139 acydburn
                        WHERE p.post_id = $post_id
117 2923 psotfx
                                AND t.topic_id = p.topic_id
118 3575 acydburn
                                AND u.user_id = p.poster_id
119 4970 psotfx
                                AND (f.forum_id = t.forum_id
120 9356 terrafrost
                                        OR f.forum_id = $forum_id)" .
121 10253 acydburn
                                (($auth->acl_get('m_approve', $forum_id)) ? '' : 'AND p.post_approved = 1');
122 5486 acydburn
        break;
123 326 thefinn
124 2986 psotfx
        case 'smilies':
125 4883 acydburn
                $sql = '';
126 4544 acydburn
                generate_smilies('window', $forum_id);
127 5486 acydburn
        break;
128 2986 psotfx
129 4883 acydburn
        case 'popup':
130 5678 acydburn
                if ($forum_id)
131 5678 acydburn
                {
132 5678 acydburn
                        $sql = 'SELECT forum_style
133 5678 acydburn
                                FROM ' . FORUMS_TABLE . '
134 5678 acydburn
                                WHERE forum_id = ' . $forum_id;
135 5678 acydburn
                }
136 5678 acydburn
                else
137 5678 acydburn
                {
138 5678 acydburn
                        upload_popup();
139 8957 acydburn
                        return;
140 5678 acydburn
                }
141 5486 acydburn
        break;
142 4883 acydburn
143 2923 psotfx
        default:
144 4170 psotfx
                $sql = '';
145 5902 acydburn
        break;
146 987 psotfx
}
147 2183 psotfx
148 5902 acydburn
if (!$sql)
149 2972 psotfx
{
150 7356 davidmj
        $user->setup('posting');
151 5902 acydburn
        trigger_error('NO_POST_MODE');
152 5902 acydburn
}
153 3354 psotfx
154 5902 acydburn
$result = $db->sql_query($sql);
155 5902 acydburn
$post_data = $db->sql_fetchrow($result);
156 5902 acydburn
$db->sql_freeresult($result);
157 3572 acydburn
158 6478 acydburn
if (!$post_data)
159 6478 acydburn
{
160 7356 davidmj
        if (!($mode == 'post' || $mode == 'bump' || $mode == 'reply'))
161 7356 davidmj
        {
162 7356 davidmj
                $user->setup('posting');
163 7356 davidmj
        }
164 6478 acydburn
        trigger_error(($mode == 'post' || $mode == 'bump' || $mode == 'reply') ? 'NO_TOPIC' : 'NO_POST');
165 6478 acydburn
}
166 6478 acydburn
167 10253 acydburn
// Not able to reply to unapproved posts/topics
168 10253 acydburn
// TODO: add more descriptive language key
169 10253 acydburn
if ($auth->acl_get('m_approve', $forum_id) && ((($mode == 'reply' || $mode == 'bump') && !$post_data['topic_approved']) || ($mode == 'quote' && !$post_data['post_approved'])))
170 10253 acydburn
{
171 10253 acydburn
        trigger_error(($mode == 'reply' || $mode == 'bump') ? 'TOPIC_UNAPPROVED' : 'POST_UNAPPROVED');
172 10253 acydburn
}
173 10253 acydburn
174 5902 acydburn
if ($mode == 'popup')
175 5902 acydburn
{
176 5902 acydburn
        upload_popup($post_data['forum_style']);
177 8957 acydburn
        return;
178 2972 psotfx
}
179 2983 psotfx
180 6190 acydburn
$user->setup(array('posting', 'mcp', 'viewtopic'), $post_data['forum_style']);
181 6190 acydburn
182 10306 toonarmy
if ($config['enable_post_confirm'] && !$user->data['is_registered'])
183 10306 toonarmy
{
184 10306 toonarmy
        include($phpbb_root_path . 'includes/captcha/captcha_factory.' . $phpEx);
185 10306 toonarmy
        $captcha =& phpbb_captcha_factory::get_instance($config['captcha_plugin']);
186 10306 toonarmy
        $captcha->init(CONFIRM_POST);
187 10306 toonarmy
}
188 10306 toonarmy
189 5902 acydburn
// Use post_row values in favor of submitted ones...
190 5902 acydburn
$forum_id        = (!empty($post_data['forum_id'])) ? (int) $post_data['forum_id'] : (int) $forum_id;
191 5902 acydburn
$topic_id        = (!empty($post_data['topic_id'])) ? (int) $post_data['topic_id'] : (int) $topic_id;
192 5902 acydburn
$post_id        = (!empty($post_data['post_id'])) ? (int) $post_data['post_id'] : (int) $post_id;
193 5902 acydburn
194 5902 acydburn
// Need to login to passworded forum first?
195 5902 acydburn
if ($post_data['forum_password'])
196 2983 psotfx
{
197 5902 acydburn
        login_forum_box(array(
198 5902 acydburn
                'forum_id'                        => $forum_id,
199 5902 acydburn
                'forum_password'        => $post_data['forum_password'])
200 5902 acydburn
        );
201 2983 psotfx
}
202 2983 psotfx
203 5765 acydburn
// Check permissions
204 7804 acydburn
if ($user->data['is_bot'])
205 7804 acydburn
{
206 7804 acydburn
        redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
207 7804 acydburn
}
208 5902 acydburn
209 5902 acydburn
// Is the user able to read within this forum?
210 5902 acydburn
if (!$auth->acl_get('f_read', $forum_id))
211 2958 psotfx
{
212 6619 acydburn
        if ($user->data['user_id'] != ANONYMOUS)
213 4836 acydburn
        {
214 5765 acydburn
                trigger_error('USER_CANNOT_READ');
215 4836 acydburn
        }
216 4970 psotfx
217 5765 acydburn
        login_box('', $user->lang['LOGIN_EXPLAIN_POST']);
218 5765 acydburn
}
219 5765 acydburn
220 5902 acydburn
// Permission to do the action asked?
221 6135 acydburn
$is_authed = false;
222 6135 acydburn
223 6135 acydburn
switch ($mode)
224 5765 acydburn
{
225 6135 acydburn
        case 'post':
226 6135 acydburn
                if ($auth->acl_get('f_post', $forum_id))
227 6135 acydburn
                {
228 6135 acydburn
                        $is_authed = true;
229 6135 acydburn
                }
230 6135 acydburn
        break;
231 6135 acydburn
232 6135 acydburn
        case 'bump':
233 6135 acydburn
                if ($auth->acl_get('f_bump', $forum_id))
234 6135 acydburn
                {
235 6135 acydburn
                        $is_authed = true;
236 6135 acydburn
                }
237 6135 acydburn
        break;
238 6135 acydburn
239 6135 acydburn
        case 'quote':
240 6831 acydburn
241 6831 acydburn
                $post_data['post_edit_locked'] = 0;
242 6831 acydburn
243 6831 acydburn
        // no break;
244 6831 acydburn
245 6135 acydburn
        case 'reply':
246 6135 acydburn
                if ($auth->acl_get('f_reply', $forum_id))
247 6135 acydburn
                {
248 6135 acydburn
                        $is_authed = true;
249 6135 acydburn
                }
250 6135 acydburn
        break;
251 6135 acydburn
252 6135 acydburn
        case 'edit':
253 6135 acydburn
                if ($user->data['is_registered'] && $auth->acl_gets('f_edit', 'm_edit', $forum_id))
254 6135 acydburn
                {
255 6135 acydburn
                        $is_authed = true;
256 6135 acydburn
                }
257 6135 acydburn
        break;
258 6135 acydburn
259 6135 acydburn
        case 'delete':
260 6135 acydburn
                if ($user->data['is_registered'] && $auth->acl_gets('f_delete', 'm_delete', $forum_id))
261 6135 acydburn
                {
262 6135 acydburn
                        $is_authed = true;
263 6135 acydburn
                }
264 6135 acydburn
        break;
265 6135 acydburn
}
266 6135 acydburn
267 6135 acydburn
if (!$is_authed)
268 6135 acydburn
{
269 6135 acydburn
        $check_auth = ($mode == 'quote') ? 'reply' : $mode;
270 6135 acydburn
271 5765 acydburn
        if ($user->data['is_registered'])
272 5765 acydburn
        {
273 5765 acydburn
                trigger_error('USER_CANNOT_' . strtoupper($check_auth));
274 5765 acydburn
        }
275 5765 acydburn
276 4970 psotfx
        login_box('', $user->lang['LOGIN_EXPLAIN_' . strtoupper($mode)]);
277 2972 psotfx
}
278 502 psotfx
279 5902 acydburn
// Is the user able to post within this forum?
280 5902 acydburn
if ($post_data['forum_type'] != FORUM_POST && in_array($mode, array('post', 'bump', 'quote', 'reply')))
281 5902 acydburn
{
282 5902 acydburn
        trigger_error('USER_CANNOT_FORUM_POST');
283 5902 acydburn
}
284 5902 acydburn
285 2997 psotfx
// Forum/Topic locked?
286 5902 acydburn
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))
287 2997 psotfx
{
288 5902 acydburn
        trigger_error(($post_data['forum_status'] == ITEM_LOCKED) ? 'FORUM_LOCKED' : 'TOPIC_LOCKED');
289 2997 psotfx
}
290 2997 psotfx
291 4970 psotfx
// Can we edit this post ... if we're a moderator with rights then always yes
292 4970 psotfx
// else it depends on editing times, lock status and if we're the correct user
293 5902 acydburn
if ($mode == 'edit' && !$auth->acl_get('m_edit', $forum_id))
294 2972 psotfx
{
295 5902 acydburn
        if ($user->data['user_id'] != $post_data['poster_id'])
296 4970 psotfx
        {
297 4970 psotfx
                trigger_error('USER_CANNOT_EDIT');
298 4970 psotfx
        }
299 4970 psotfx
300 6104 acydburn
        if (!($post_data['post_time'] > time() - ($config['edit_time'] * 60) || !$config['edit_time']))
301 4883 acydburn
        {
302 4883 acydburn
                trigger_error('CANNOT_EDIT_TIME');
303 4883 acydburn
        }
304 2849 psotfx
305 5902 acydburn
        if ($post_data['post_edit_locked'])
306 4883 acydburn
        {
307 4883 acydburn
                trigger_error('CANNOT_EDIT_POST_LOCKED');
308 4883 acydburn
        }
309 3553 acydburn
}
310 3553 acydburn
311 5902 acydburn
// Handle delete mode...
312 5902 acydburn
if ($mode == 'delete')
313 3858 ludovic_arnaud
{
314 5902 acydburn
        handle_post_delete($forum_id, $topic_id, $post_id, $post_data);
315 8957 acydburn
        return;
316 3858 ludovic_arnaud
}
317 3858 ludovic_arnaud
318 5902 acydburn
// Handle bump mode...
319 5902 acydburn
if ($mode == 'bump')
320 3582 acydburn
{
321 8775 Kellanved
        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'])
322 8944 acydburn
           && check_link_hash(request_var('hash', ''), "topic_{$post_data['topic_id']}"))
323 3582 acydburn
        {
324 11200 git-gate
                $meta_url = phpbb_bump_topic($forum_id, $topic_id, $post_data, $current_time);
325 5902 acydburn
                meta_refresh(3, $meta_url);
326 5902 acydburn
327 5902 acydburn
                $message = $user->lang['TOPIC_BUMPED'] . '<br /><br />' . sprintf($user->lang['VIEW_MESSAGE'], '<a href="' . $meta_url . '">', '</a>');
328 6015 acydburn
                $message .= '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id) . '">', '</a>');
329 5902 acydburn
330 3883 acydburn
                trigger_error($message);
331 3582 acydburn
        }
332 6015 acydburn
333 5902 acydburn
        trigger_error('BUMP_ERROR');
334 5902 acydburn
}
335 5902 acydburn
336 8034 acydburn
// Subject length limiting to 60 characters if first post...
337 8034 acydburn
if ($mode == 'post' || ($mode == 'edit' && $post_data['topic_first_post_id'] == $post_data['post_id']))
338 8034 acydburn
{
339 8034 acydburn
        $template->assign_var('S_NEW_MESSAGE', true);
340 8034 acydburn
}
341 5902 acydburn
342 5902 acydburn
// Determine some vars
343 7777 kellanved
if (isset($post_data['poster_id']) && $post_data['poster_id'] == ANONYMOUS)
344 7777 kellanved
{
345 7777 kellanved
        $post_data['quote_username'] = (!empty($post_data['post_username'])) ? $post_data['post_username'] : $user->lang['GUEST'];
346 7777 kellanved
}
347 7777 kellanved
else
348 7777 kellanved
{
349 7777 kellanved
        $post_data['quote_username'] = isset($post_data['username']) ? $post_data['username'] : '';
350 7777 kellanved
}
351 8034 acydburn
352 5902 acydburn
$post_data['post_edit_locked']        = (isset($post_data['post_edit_locked'])) ? (int) $post_data['post_edit_locked'] : 0;
353 9731 bantu
$post_data['post_subject_md5']        = (isset($post_data['post_subject']) && $mode == 'edit') ? md5($post_data['post_subject']) : '';
354 5902 acydburn
$post_data['post_subject']                = (in_array($mode, array('quote', 'edit'))) ? $post_data['post_subject'] : ((isset($post_data['topic_title'])) ? $post_data['topic_title'] : '');
355 5902 acydburn
$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;
356 5902 acydburn
$post_data['poll_length']                = (!empty($post_data['poll_length'])) ? (int) $post_data['poll_length'] / 86400 : 0;
357 5902 acydburn
$post_data['poll_start']                = (!empty($post_data['poll_start'])) ? (int) $post_data['poll_start'] : 0;
358 5902 acydburn
$post_data['icon_id']                        = (!isset($post_data['icon_id']) || in_array($mode, array('quote', 'reply'))) ? 0 : (int) $post_data['icon_id'];
359 5902 acydburn
$post_data['poll_options']                = array();
360 5902 acydburn
361 5902 acydburn
// Get Poll Data
362 5902 acydburn
if ($post_data['poll_start'])
363 5902 acydburn
{
364 5902 acydburn
        $sql = 'SELECT poll_option_text
365 5902 acydburn
                FROM ' . POLL_OPTIONS_TABLE . "
366 5902 acydburn
                WHERE topic_id = $topic_id
367 5902 acydburn
                ORDER BY poll_option_id";
368 5902 acydburn
        $result = $db->sql_query($sql);
369 5902 acydburn
370 5902 acydburn
        while ($row = $db->sql_fetchrow($result))
371 3582 acydburn
        {
372 5902 acydburn
                $post_data['poll_options'][] = trim($row['poll_option_text']);
373 3582 acydburn
        }
374 5902 acydburn
        $db->sql_freeresult($result);
375 3582 acydburn
}
376 3582 acydburn
377 10782 git-gate
if ($mode == 'edit')
378 10782 git-gate
{
379 10782 git-gate
        $original_poll_data = array(
380 10782 git-gate
                'poll_title'                => $post_data['poll_title'],
381 10782 git-gate
                'poll_length'                => $post_data['poll_length'],
382 10782 git-gate
                'poll_max_options'        => $post_data['poll_max_options'],
383 10782 git-gate
                'poll_option_text'        => implode("\n", $post_data['poll_options']),
384 10782 git-gate
                'poll_start'                => $post_data['poll_start'],
385 10782 git-gate
                'poll_last_vote'        => $post_data['poll_last_vote'],
386 10782 git-gate
                'poll_vote_change'        => $post_data['poll_vote_change'],
387 10782 git-gate
        );
388 10782 git-gate
}
389 10753 git-gate
390 5902 acydburn
$orig_poll_options_size = sizeof($post_data['poll_options']);
391 4167 psotfx
392 5902 acydburn
$message_parser = new parse_message();
393 5902 acydburn
394 5902 acydburn
if (isset($post_data['post_text']))
395 3582 acydburn
{
396 5902 acydburn
        $message_parser->message = &$post_data['post_text'];
397 5902 acydburn
        unset($post_data['post_text']);
398 3582 acydburn
}
399 3582 acydburn
400 5902 acydburn
// Set some default variables
401 5922 acydburn
$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);
402 6014 acydburn
403 5902 acydburn
foreach ($uninit as $var_name => $default_value)
404 3582 acydburn
{
405 5902 acydburn
        if (!isset($post_data[$var_name]))
406 5902 acydburn
        {
407 5902 acydburn
                $post_data[$var_name] = $default_value;
408 5902 acydburn
        }
409 3582 acydburn
}
410 5902 acydburn
unset($uninit);
411 3582 acydburn
412 6364 acydburn
// Always check if the submitted attachment data is valid and belongs to the user.
413 6364 acydburn
// Further down (especially in submit_post()) we do not check this again.
414 6014 acydburn
$message_parser->get_submitted_attachment_data($post_data['poster_id']);
415 6014 acydburn
416 5902 acydburn
if ($post_data['post_attachment'] && !$submit && !$refresh && !$preview && $mode == 'edit')
417 3582 acydburn
{
418 6015 acydburn
        // Do not change to SELECT *
419 6364 acydburn
        $sql = 'SELECT attach_id, is_orphan, attach_comment, real_filename
420 5902 acydburn
                FROM ' . ATTACHMENTS_TABLE . "
421 5902 acydburn
                WHERE post_msg_id = $post_id
422 5902 acydburn
                        AND in_message = 0
423 6364 acydburn
                        AND is_orphan = 0
424 6628 acydburn
                ORDER BY filetime DESC";
425 5902 acydburn
        $result = $db->sql_query($sql);
426 5902 acydburn
        $message_parser->attachment_data = array_merge($message_parser->attachment_data, $db->sql_fetchrowset($result));
427 5902 acydburn
        $db->sql_freeresult($result);
428 3582 acydburn
}
429 3582 acydburn
430 5902 acydburn
if ($post_data['poster_id'] == ANONYMOUS)
431 5902 acydburn
{
432 5902 acydburn
        $post_data['username'] = ($mode == 'quote' || $mode == 'edit') ? trim($post_data['post_username']) : '';
433 5902 acydburn
}
434 5902 acydburn
else
435 5902 acydburn
{
436 5902 acydburn
        $post_data['username'] = ($mode == 'quote' || $mode == 'edit') ? trim($post_data['username']) : '';
437 5902 acydburn
}
438 4167 psotfx
439 5902 acydburn
$post_data['enable_urls'] = $post_data['enable_magic_url'];
440 4047 ludovic_arnaud
441 5902 acydburn
if ($mode != 'edit')
442 4614 acydburn
{
443 5902 acydburn
        $post_data['enable_sig']                = ($config['allow_sig'] && $user->optionget('attachsig')) ? true: false;
444 5902 acydburn
        $post_data['enable_smilies']        = ($config['allow_smilies'] && $user->optionget('smilies')) ? true : false;
445 5902 acydburn
        $post_data['enable_bbcode']                = ($config['allow_bbcode'] && $user->optionget('bbcode')) ? true : false;
446 5902 acydburn
        $post_data['enable_urls']                = true;
447 5902 acydburn
}
448 4614 acydburn
449 5902 acydburn
$post_data['enable_magic_url'] = $post_data['drafts'] = false;
450 4614 acydburn
451 5902 acydburn
// User own some drafts?
452 7384 acydburn
if ($user->data['is_registered'] && $auth->acl_get('u_savedrafts') && ($mode == 'reply' || $mode == 'post' || $mode == 'quote'))
453 5902 acydburn
{
454 5902 acydburn
        $sql = 'SELECT draft_id
455 5902 acydburn
                FROM ' . DRAFTS_TABLE . '
456 7615 acydburn
                WHERE user_id = ' . $user->data['user_id'] .
457 8146 acydburn
                        (($forum_id) ? ' AND forum_id = ' . (int) $forum_id : '') .
458 7615 acydburn
                        (($topic_id) ? ' AND topic_id = ' . (int) $topic_id : '') .
459 5902 acydburn
                        (($draft_id) ? " AND draft_id <> $draft_id" : '');
460 5902 acydburn
        $result = $db->sql_query_limit($sql, 1);
461 4614 acydburn
462 5902 acydburn
        if ($db->sql_fetchrow($result))
463 5902 acydburn
        {
464 5902 acydburn
                $post_data['drafts'] = true;
465 5902 acydburn
        }
466 5902 acydburn
        $db->sql_freeresult($result);
467 5902 acydburn
}
468 4614 acydburn
469 5902 acydburn
$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);
470 4614 acydburn
471 5902 acydburn
// Check if user is watching this topic
472 5949 acydburn
if ($mode != 'post' && $config['allow_topic_notify'] && $user->data['is_registered'])
473 5902 acydburn
{
474 5902 acydburn
        $sql = 'SELECT topic_id
475 5902 acydburn
                FROM ' . TOPICS_WATCH_TABLE . '
476 5902 acydburn
                WHERE topic_id = ' . $topic_id . '
477 5902 acydburn
                        AND user_id = ' . $user->data['user_id'];
478 5902 acydburn
        $result = $db->sql_query($sql);
479 5902 acydburn
        $post_data['notify_set'] = (int) $db->sql_fetchfield('topic_id');
480 5902 acydburn
        $db->sql_freeresult($result);
481 4614 acydburn
}
482 5902 acydburn
483 5902 acydburn
// Do we want to edit our post ?
484 6073 acydburn
if ($mode == 'edit' && $post_data['bbcode_uid'])
485 4634 acydburn
{
486 5902 acydburn
        $message_parser->bbcode_uid = $post_data['bbcode_uid'];
487 4634 acydburn
}
488 4614 acydburn
489 5902 acydburn
// HTML, BBCode, Smilies, Images and Flash status
490 5902 acydburn
$bbcode_status        = ($config['allow_bbcode'] && $auth->acl_get('f_bbcode', $forum_id)) ? true : false;
491 9615 nickvergessen
$smilies_status        = ($config['allow_smilies'] && $auth->acl_get('f_smilies', $forum_id)) ? true : false;
492 7241 acydburn
$img_status                = ($bbcode_status && $auth->acl_get('f_img', $forum_id)) ? true : false;
493 6364 acydburn
$url_status                = ($config['allow_post_links']) ? true : false;
494 7715 kellanved
$flash_status        = ($bbcode_status && $auth->acl_get('f_flash', $forum_id) && $config['allow_post_flash']) ? true : false;
495 9590 toonarmy
$quote_status        = true;
496 5902 acydburn
497 4467 acydburn
// Save Draft
498 7384 acydburn
if ($save && $user->data['is_registered'] && $auth->acl_get('u_savedrafts') && ($mode == 'reply' || $mode == 'post' || $mode == 'quote'))
499 4467 acydburn
{
500 6584 acydburn
        $subject = utf8_normalize_nfc(request_var('subject', '', true));
501 5902 acydburn
        $subject = (!$subject && $mode != 'post') ? $post_data['topic_title'] : $subject;
502 6584 acydburn
        $message = utf8_normalize_nfc(request_var('message', '', true));
503 8350 acydburn
504 4862 acydburn
        if ($subject && $message)
505 4467 acydburn
        {
506 5967 acydburn
                if (confirm_box(true))
507 5967 acydburn
                {
508 5967 acydburn
                        $sql = 'INSERT INTO ' . DRAFTS_TABLE . ' ' . $db->sql_build_array('INSERT', array(
509 7961 acydburn
                                'user_id'                => (int) $user->data['user_id'],
510 7961 acydburn
                                'topic_id'                => (int) $topic_id,
511 7961 acydburn
                                'forum_id'                => (int) $forum_id,
512 7961 acydburn
                                'save_time'                => (int) $current_time,
513 7961 acydburn
                                'draft_subject'        => (string) $subject,
514 7961 acydburn
                                'draft_message'        => (string) $message)
515 5967 acydburn
                        );
516 5967 acydburn
                        $db->sql_query($sql);
517 4970 psotfx
518 6015 acydburn
                        $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");
519 4467 acydburn
520 5967 acydburn
                        meta_refresh(3, $meta_info);
521 4668 acydburn
522 5967 acydburn
                        $message = $user->lang['DRAFT_SAVED'] . '<br /><br />';
523 5967 acydburn
                        $message .= ($mode != 'post') ? sprintf($user->lang['RETURN_TOPIC'], '<a href="' . $meta_info . '">', '</a>') . '<br /><br />' : '';
524 6015 acydburn
                        $message .= sprintf($user->lang['RETURN_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id) . '">', '</a>');
525 4668 acydburn
526 5967 acydburn
                        trigger_error($message);
527 5967 acydburn
                }
528 5967 acydburn
                else
529 5967 acydburn
                {
530 5967 acydburn
                        $s_hidden_fields = build_hidden_fields(array(
531 5967 acydburn
                                'mode'                => $mode,
532 5967 acydburn
                                'save'                => true,
533 5967 acydburn
                                'f'                        => $forum_id,
534 5967 acydburn
                                't'                        => $topic_id,
535 5967 acydburn
                                'subject'        => $subject,
536 5967 acydburn
                                'message'        => $message,
537 8380 Kellanved
                                'attachment_data' => $message_parser->attachment_data,
538 6161 acydburn
                                )
539 5967 acydburn
                        );
540 5967 acydburn
541 9859 toonarmy
                        $hidden_fields = array(
542 9859 toonarmy
                                'icon_id'                        => 0,
543 9859 toonarmy
544 9859 toonarmy
                                'disable_bbcode'        => false,
545 9859 toonarmy
                                'disable_smilies'        => false,
546 9859 toonarmy
                                'disable_magic_url'        => false,
547 9859 toonarmy
                                'attach_sig'                => true,
548 9859 toonarmy
                                'lock_topic'                => false,
549 9859 toonarmy
550 9859 toonarmy
                                'topic_type'                => POST_NORMAL,
551 9859 toonarmy
                                'topic_time_limit'        => 0,
552 9859 toonarmy
553 9859 toonarmy
                                'poll_title'                => '',
554 9859 toonarmy
                                'poll_option_text'        => '',
555 9859 toonarmy
                                'poll_max_options'        => 1,
556 9859 toonarmy
                                'poll_length'                => 0,
557 9859 toonarmy
                                'poll_vote_change'        => false,
558 9859 toonarmy
                        );
559 9859 toonarmy
560 9859 toonarmy
                        foreach ($hidden_fields as $name => $default)
561 9859 toonarmy
                        {
562 9859 toonarmy
                                if (!isset($_POST[$name]))
563 9859 toonarmy
                                {
564 9859 toonarmy
                                        // Don't include it, if its not available
565 9859 toonarmy
                                        unset($hidden_fields[$name]);
566 9859 toonarmy
                                        continue;
567 9859 toonarmy
                                }
568 9859 toonarmy
569 9859 toonarmy
                                if (is_bool($default))
570 9859 toonarmy
                                {
571 9859 toonarmy
                                        // Use the string representation
572 9859 toonarmy
                                        $hidden_fields[$name] = request_var($name, '');
573 9859 toonarmy
                                }
574 9859 toonarmy
                                else
575 9859 toonarmy
                                {
576 9859 toonarmy
                                        $hidden_fields[$name] = request_var($name, $default);
577 9859 toonarmy
                                }
578 9859 toonarmy
                        }
579 9859 toonarmy
580 9859 toonarmy
                        $s_hidden_fields .= build_hidden_fields($hidden_fields);
581 9859 toonarmy
582 5967 acydburn
                        confirm_box(false, 'SAVE_DRAFT', $s_hidden_fields);
583 5967 acydburn
                }
584 4467 acydburn
        }
585 6801 davidmj
        else
586 6801 davidmj
        {
587 8306 acydburn
                if (utf8_clean_string($subject) === '')
588 6801 davidmj
                {
589 6801 davidmj
                        $error[] = $user->lang['EMPTY_SUBJECT'];
590 6801 davidmj
                }
591 4539 acydburn
592 8306 acydburn
                if (utf8_clean_string($message) === '')
593 6801 davidmj
                {
594 6801 davidmj
                        $error[] = $user->lang['TOO_FEW_CHARS'];
595 6801 davidmj
                }
596 6801 davidmj
        }
597 5902 acydburn
        unset($subject, $message);
598 4467 acydburn
}
599 4467 acydburn
600 5902 acydburn
// Load requested Draft
601 7384 acydburn
if ($draft_id && ($mode == 'reply' || $mode == 'quote' || $mode == 'post') && $user->data['is_registered'] && $auth->acl_get('u_savedrafts'))
602 4668 acydburn
{
603 4970 psotfx
        $sql = 'SELECT draft_subject, draft_message
604 4970 psotfx
                FROM ' . DRAFTS_TABLE . "
605 4668 acydburn
                WHERE draft_id = $draft_id
606 4668 acydburn
                        AND user_id = " . $user->data['user_id'];
607 4668 acydburn
        $result = $db->sql_query_limit($sql, 1);
608 5902 acydburn
        $row = $db->sql_fetchrow($result);
609 5902 acydburn
        $db->sql_freeresult($result);
610 4970 psotfx
611 5902 acydburn
        if ($row)
612 4668 acydburn
        {
613 5922 acydburn
                $post_data['post_subject'] = $row['draft_subject'];
614 5922 acydburn
                $message_parser->message = $row['draft_message'];
615 5922 acydburn
616 4668 acydburn
                $template->assign_var('S_DRAFT_LOADED', true);
617 4668 acydburn
        }
618 4668 acydburn
        else
619 4668 acydburn
        {
620 4668 acydburn
                $draft_id = 0;
621 4668 acydburn
        }
622 4668 acydburn
}
623 4467 acydburn
624 5902 acydburn
// Load draft overview
625 7384 acydburn
if ($load && ($mode == 'reply' || $mode == 'quote' || $mode == 'post') && $post_data['drafts'])
626 4668 acydburn
{
627 4668 acydburn
        load_drafts($topic_id, $forum_id);
628 4668 acydburn
}
629 4668 acydburn
630 6448 davidmj
631 3961 psotfx
if ($submit || $preview || $refresh)
632 2923 psotfx
{
633 6584 acydburn
        $post_data['topic_cur_post_id']        = request_var('topic_cur_post_id', 0);
634 7920 acydburn
        $post_data['post_subject']                = utf8_normalize_nfc(request_var('subject', '', true));
635 6584 acydburn
        $message_parser->message                = utf8_normalize_nfc(request_var('message', '', true));
636 4486 acydburn
637 6584 acydburn
        $post_data['username']                        = utf8_normalize_nfc(request_var('username', $post_data['username'], true));
638 6584 acydburn
        $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)) : '';
639 6894 acydburn
640 6894 acydburn
        $post_data['orig_topic_type']        = $post_data['topic_type'];
641 5902 acydburn
        $post_data['topic_type']                = request_var('topic_type', (($mode != 'post') ? (int) $post_data['topic_type'] : POST_NORMAL));
642 5902 acydburn
        $post_data['topic_time_limit']        = request_var('topic_time_limit', (($mode != 'post') ? (int) $post_data['topic_time_limit'] : 0));
643 3572 acydburn
644 9580 bantu
        if ($post_data['enable_icons'] && $auth->acl_get('f_icons', $forum_id))
645 9580 bantu
        {
646 9580 bantu
                $post_data['icon_id'] = request_var('icon', (int) $post_data['icon_id']);
647 9580 bantu
        }
648 9580 bantu
649 5902 acydburn
        $post_data['enable_bbcode']                = (!$bbcode_status || isset($_POST['disable_bbcode'])) ? false : true;
650 5902 acydburn
        $post_data['enable_smilies']        = (!$smilies_status || isset($_POST['disable_smilies'])) ? false : true;
651 5902 acydburn
        $post_data['enable_urls']                = (isset($_POST['disable_magic_url'])) ? 0 : 1;
652 8362 Kellanved
        $post_data['enable_sig']                = (!$config['allow_sig'] || !$auth->acl_get('f_sigs', $forum_id) || !$auth->acl_get('u_sig')) ? false : ((isset($_POST['attach_sig']) && $user->data['is_registered']) ? true : false);
653 3937 ludovic_arnaud
654 5949 acydburn
        if ($config['allow_topic_notify'] && $user->data['is_registered'])
655 5949 acydburn
        {
656 5949 acydburn
                $notify = (isset($_POST['notify'])) ? true : false;
657 5949 acydburn
        }
658 5949 acydburn
        else
659 5949 acydburn
        {
660 5949 acydburn
                $notify = false;
661 5949 acydburn
        }
662 5949 acydburn
663 5902 acydburn
        $topic_lock                        = (isset($_POST['lock_topic'])) ? true : false;
664 5902 acydburn
        $post_lock                        = (isset($_POST['lock_post'])) ? true : false;
665 5902 acydburn
        $poll_delete                = (isset($_POST['poll_delete'])) ? true : false;
666 3572 acydburn
667 4978 acydburn
        if ($submit)
668 4978 acydburn
        {
669 5902 acydburn
                $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);
670 4978 acydburn
                $status_switch = ($status_switch != $check_value);
671 4978 acydburn
        }
672 4978 acydburn
        else
673 4978 acydburn
        {
674 4978 acydburn
                $status_switch = 1;
675 4978 acydburn
        }
676 4093 acydburn
677 4981 acydburn
        // Delete Poll
678 8146 acydburn
        if ($poll_delete && $mode == 'edit' && sizeof($post_data['poll_options']) &&
679 5902 acydburn
                ((!$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)))
680 3631 acydburn
        {
681 8268 acydburn
                if ($submit && check_form_key('posting'))
682 6513 acydburn
                {
683 6513 acydburn
                        $sql = 'DELETE FROM ' . POLL_OPTIONS_TABLE . "
684 6513 acydburn
                                WHERE topic_id = $topic_id";
685 6513 acydburn
                        $db->sql_query($sql);
686 3631 acydburn
687 6513 acydburn
                        $sql = 'DELETE FROM ' . POLL_VOTES_TABLE . "
688 6513 acydburn
                                WHERE topic_id = $topic_id";
689 6513 acydburn
                        $db->sql_query($sql);
690 8350 acydburn
691 6513 acydburn
                        $topic_sql = array(
692 6513 acydburn
                                'poll_title'                => '',
693 6513 acydburn
                                'poll_start'                 => 0,
694 6513 acydburn
                                'poll_length'                => 0,
695 6513 acydburn
                                'poll_last_vote'        => 0,
696 6513 acydburn
                                'poll_max_options'        => 0,
697 6513 acydburn
                                'poll_vote_change'        => 0
698 6513 acydburn
                        );
699 3883 acydburn
700 6513 acydburn
                        $sql = 'UPDATE ' . TOPICS_TABLE . '
701 6513 acydburn
                                SET ' . $db->sql_build_array('UPDATE', $topic_sql) . "
702 6513 acydburn
                                WHERE topic_id = $topic_id";
703 6513 acydburn
                        $db->sql_query($sql);
704 6513 acydburn
                }
705 3883 acydburn
706 5902 acydburn
                $post_data['poll_title'] = $post_data['poll_option_text'] = '';
707 5902 acydburn
                $post_data['poll_vote_change'] = $post_data['poll_max_options'] = $post_data['poll_length'] = 0;
708 3631 acydburn
        }
709 3631 acydburn
        else
710 3631 acydburn
        {
711 6584 acydburn
                $post_data['poll_title']                = utf8_normalize_nfc(request_var('poll_title', '', true));
712 5902 acydburn
                $post_data['poll_length']                = request_var('poll_length', 0);
713 6584 acydburn
                $post_data['poll_option_text']        = utf8_normalize_nfc(request_var('poll_option_text', '', true));
714 5902 acydburn
                $post_data['poll_max_options']        = request_var('poll_max_options', 1);
715 9470 acydburn
                $post_data['poll_vote_change']        = ($auth->acl_get('f_votechg', $forum_id) && $auth->acl_get('f_vote', $forum_id) && isset($_POST['poll_vote_change'])) ? 1 : 0;
716 3631 acydburn
        }
717 3631 acydburn
718 3072 psotfx
        // If replying/quoting and last post id has changed
719 4093 acydburn
        // give user option to continue submit or return to post
720 3543 acydburn
        // notify and show user the post made between his request and the final submit
721 5902 acydburn
        if (($mode == 'reply' || $mode == 'quote') && $post_data['topic_cur_post_id'] && $post_data['topic_cur_post_id'] != $post_data['topic_last_post_id'])
722 3072 psotfx
        {
723 6161 acydburn
                // Only do so if it is allowed forum-wide
724 6364 acydburn
                if ($post_data['forum_flags'] & FORUM_FLAG_POST_REVIEW)
725 3898 acydburn
                {
726 6161 acydburn
                        if (topic_review($topic_id, $forum_id, 'post_review', $post_data['topic_cur_post_id']))
727 6161 acydburn
                        {
728 6161 acydburn
                                $template->assign_var('S_POST_REVIEW', true);
729 6161 acydburn
                        }
730 6161 acydburn
731 6161 acydburn
                        $submit = false;
732 6161 acydburn
                        $refresh = true;
733 3898 acydburn
                }
734 3072 psotfx
        }
735 3072 psotfx
736 4819 acydburn
        // Parse Attachments - before checksum is calculated
737 10186 nickvergessen
        $message_parser->parse_attachments('fileupload', $mode, $forum_id, $submit, $preview, $refresh);
738 4170 psotfx
739 3354 psotfx
        // Grab md5 'checksum' of new message
740 3816 acydburn
        $message_md5 = md5($message_parser->message);
741 2972 psotfx
742 9731 bantu
        // If editing and checksum has changed we know the post was edited while we're editing
743 9731 bantu
        // Notify and show user the changed post
744 9731 bantu
        if ($mode == 'edit' && $post_data['forum_flags'] & FORUM_FLAG_POST_REVIEW)
745 9731 bantu
        {
746 9731 bantu
                $edit_post_message_checksum = request_var('edit_post_message_checksum', '');
747 9731 bantu
                $edit_post_subject_checksum = request_var('edit_post_subject_checksum', '');
748 9731 bantu
749 9731 bantu
                // $post_data['post_checksum'] is the checksum of the post submitted in the meantime
750 9731 bantu
                // $message_md5 is the checksum of the post we're about to submit
751 9731 bantu
                // $edit_post_message_checksum is the checksum of the post we're editing
752 9731 bantu
                // ...
753 9731 bantu
754 9731 bantu
                // We make sure nobody else made exactly the same change
755 9731 bantu
                // we're about to submit by also checking $message_md5 != $post_data['post_checksum']
756 9731 bantu
                if (($edit_post_message_checksum !== '' && $edit_post_message_checksum != $post_data['post_checksum'] && $message_md5 != $post_data['post_checksum'])
757 9731 bantu
                 || ($edit_post_subject_checksum !== '' && $edit_post_subject_checksum != $post_data['post_subject_md5'] && md5($post_data['post_subject']) != $post_data['post_subject_md5']))
758 9731 bantu
                {
759 9731 bantu
                        if (topic_review($topic_id, $forum_id, 'post_review_edit', $post_id))
760 9731 bantu
                        {
761 9731 bantu
                                $template->assign_vars(array(
762 9731 bantu
                                        'S_POST_REVIEW'                        => true,
763 9731 bantu
764 9742 bantu
                                        'L_POST_REVIEW'                        => $user->lang['POST_REVIEW_EDIT'],
765 9731 bantu
                                        'L_POST_REVIEW_EXPLAIN'        => $user->lang['POST_REVIEW_EDIT_EXPLAIN'],
766 9731 bantu
                                ));
767 9731 bantu
                        }
768 9731 bantu
769 9731 bantu
                        $submit = false;
770 9731 bantu
                        $refresh = true;
771 9731 bantu
                }
772 9731 bantu
        }
773 9731 bantu
774 2983 psotfx
        // Check checksum ... don't re-parse message if the same
775 8128 davidmj
        $update_message = ($mode != 'edit' || $message_md5 != $post_data['post_checksum'] || $status_switch || strlen($post_data['bbcode_uid']) < BBCODE_UID_LEN) ? true : false;
776 8350 acydburn
777 9955 acydburn
        // Also check if subject got updated...
778 9955 acydburn
        $update_subject = $mode != 'edit' || ($post_data['post_subject_md5'] && $post_data['post_subject_md5'] != md5($post_data['post_subject']));
779 9955 acydburn
780 4938 acydburn
        // Parse message
781 4938 acydburn
        if ($update_message)
782 2923 psotfx
        {
783 6414 acydburn
                if (sizeof($message_parser->warn_msg))
784 6414 acydburn
                {
785 6414 acydburn
                        $error[] = implode('<br />', $message_parser->warn_msg);
786 6414 acydburn
                        $message_parser->warn_msg = array();
787 6414 acydburn
                }
788 6414 acydburn
789 6364 acydburn
                $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']);
790 6414 acydburn
791 6414 acydburn
                // On a refresh we do not care about message parsing errors
792 6414 acydburn
                if (sizeof($message_parser->warn_msg) && $refresh)
793 6414 acydburn
                {
794 6414 acydburn
                        $message_parser->warn_msg = array();
795 6414 acydburn
                }
796 2972 psotfx
        }
797 4938 acydburn
        else
798 4938 acydburn
        {
799 5902 acydburn
                $message_parser->bbcode_bitfield = $post_data['bbcode_bitfield'];
800 4938 acydburn
        }
801 2183 psotfx
802 4696 ludovic_arnaud
        if ($mode != 'edit' && !$preview && !$refresh && $config['flood_interval'] && !$auth->acl_get('f_ignoreflood', $forum_id))
803 3697 acydburn
        {
804 2972 psotfx
                // Flood check
805 4699 acydburn
                $last_post_time = 0;
806 4699 acydburn
807 5117 acydburn
                if ($user->data['is_registered'])
808 4575 acydburn
                {
809 4699 acydburn
                        $last_post_time = $user->data['user_lastpost_time'];
810 4575 acydburn
                }
811 4575 acydburn
                else
812 4575 acydburn
                {
813 4696 ludovic_arnaud
                        $sql = 'SELECT post_time AS last_post_time
814 4696 ludovic_arnaud
                                FROM ' . POSTS_TABLE . "
815 4696 ludovic_arnaud
                                WHERE poster_ip = '" . $user->ip . "'
816 4696 ludovic_arnaud
                                        AND post_time > " . ($current_time - $config['flood_interval']);
817 4699 acydburn
                        $result = $db->sql_query_limit($sql, 1);
818 4699 acydburn
                        if ($row = $db->sql_fetchrow($result))
819 4699 acydburn
                        {
820 4699 acydburn
                                $last_post_time = $row['last_post_time'];
821 4699 acydburn
                        }
822 4883 acydburn
                        $db->sql_freeresult($result);
823 4575 acydburn
                }
824 2183 psotfx
825 5902 acydburn
                if ($last_post_time && ($current_time - $last_post_time) < intval($config['flood_interval']))
826 2972 psotfx
                {
827 5902 acydburn
                        $error[] = $user->lang['FLOOD_ERROR'];
828 2972 psotfx
                }
829 2972 psotfx
        }
830 2183 psotfx
831 2972 psotfx
        // Validate username
832 7823 kellanved
        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']))
833 2972 psotfx
        {
834 3926 acydburn
                include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
835 4970 psotfx
836 10881 git-gate
                $user->add_lang('ucp');
837 10881 git-gate
838 7138 acydburn
                if (($result = validate_username($post_data['username'], (!empty($post_data['post_username'])) ? $post_data['post_username'] : '')) !== false)
839 2972 psotfx
                {
840 6447 acydburn
                        $error[] = $user->lang[$result . '_USERNAME'];
841 2972 psotfx
                }
842 10881 git-gate
843 10881 git-gate
                if (($result = validate_string($post_data['username'], false, $config['min_name_chars'], $config['max_name_chars'])) !== false)
844 10881 git-gate
                {
845 10881 git-gate
                        $min_max_amount = ($result == 'TOO_SHORT') ? $config['min_name_chars'] : $config['max_name_chars'];
846 10881 git-gate
                        $error[] = sprintf($user->lang['FIELD_' . $result], $user->lang['USERNAME'], $min_max_amount);
847 10881 git-gate
                }
848 2923 psotfx
        }
849 2183 psotfx
850 5902 acydburn
        if ($config['enable_post_confirm'] && !$user->data['is_registered'] && in_array($mode, array('quote', 'post', 'reply')))
851 5739 davidmj
        {
852 9702 Kellanved
                $captcha_data = array(
853 9702 Kellanved
                        'message'        => utf8_normalize_nfc(request_var('message', '', true)),
854 9702 Kellanved
                        'subject'        => utf8_normalize_nfc(request_var('subject', '', true)),
855 9702 Kellanved
                        'username'        => utf8_normalize_nfc(request_var('username', '', true)),
856 9702 Kellanved
                );
857 9702 Kellanved
                $vc_response = $captcha->validate($captcha_data);
858 9524 Kellanved
                if ($vc_response)
859 5739 davidmj
                {
860 9524 Kellanved
                        $error[] = $vc_response;
861 5739 davidmj
                }
862 5739 davidmj
        }
863 5739 davidmj
864 8120 kellanved
        // check form
865 8265 kellanved
        if (($submit || $preview) && !check_form_key('posting'))
866 8120 kellanved
        {
867 8120 kellanved
                $error[] = $user->lang['FORM_INVALID'];
868 8120 kellanved
        }
869 8120 kellanved
870 2972 psotfx
        // Parse subject
871 8306 acydburn
        if (!$preview && !$refresh && utf8_clean_string($post_data['post_subject']) === '' && ($mode == 'post' || ($mode == 'edit' && $post_data['topic_first_post_id'] == $post_id)))
872 2972 psotfx
        {
873 4167 psotfx
                $error[] = $user->lang['EMPTY_SUBJECT'];
874 2972 psotfx
        }
875 4970 psotfx
876 5902 acydburn
        $post_data['poll_last_vote'] = (isset($post_data['poll_last_vote'])) ? $post_data['poll_last_vote'] : 0;
877 3631 acydburn
878 8146 acydburn
        if ($post_data['poll_option_text'] &&
879 7766 acydburn
                ($mode == 'post' || ($mode == 'edit' && $post_id == $post_data['topic_first_post_id']/* && (!$post_data['poll_last_vote'] || $auth->acl_get('m_edit', $forum_id))*/))
880 4981 acydburn
                && $auth->acl_get('f_poll', $forum_id))
881 4981 acydburn
        {
882 4981 acydburn
                $poll = array(
883 5902 acydburn
                        'poll_title'                => $post_data['poll_title'],
884 5902 acydburn
                        'poll_length'                => $post_data['poll_length'],
885 5902 acydburn
                        'poll_max_options'        => $post_data['poll_max_options'],
886 5902 acydburn
                        'poll_option_text'        => $post_data['poll_option_text'],
887 5902 acydburn
                        'poll_start'                => $post_data['poll_start'],
888 5902 acydburn
                        'poll_last_vote'        => $post_data['poll_last_vote'],
889 5902 acydburn
                        'poll_vote_change'        => $post_data['poll_vote_change'],
890 5902 acydburn
                        'enable_bbcode'                => $post_data['enable_bbcode'],
891 5902 acydburn
                        'enable_urls'                => $post_data['enable_urls'],
892 5902 acydburn
                        'enable_smilies'        => $post_data['enable_smilies'],
893 4981 acydburn
                        'img_status'                => $img_status
894 4981 acydburn
                );
895 2183 psotfx
896 4981 acydburn
                $message_parser->parse_poll($poll);
897 6015 acydburn
898 11607 git-gate
                $post_data['poll_options'] = (isset($poll['poll_options'])) ? $poll['poll_options'] : array();
899 5902 acydburn
                $post_data['poll_title'] = (isset($poll['poll_title'])) ? $poll['poll_title'] : '';
900 3631 acydburn
901 7267 acydburn
                /* We reset votes, therefore also allow removing options
902 5902 acydburn
                if ($post_data['poll_last_vote'] && ($poll['poll_options_size'] < $orig_poll_options_size))
903 4981 acydburn
                {
904 4981 acydburn
                        $message_parser->warn_msg[] = $user->lang['NO_DELETE_POLL_OPTIONS'];
905 7267 acydburn
                }*/
906 4981 acydburn
        }
907 11556 git-gate
        else if ($mode == 'edit' && $post_id == $post_data['topic_first_post_id'] && $auth->acl_get('f_poll', $forum_id))
908 11556 git-gate
        {
909 11556 git-gate
                // The user removed all poll options, this is equal to deleting the poll.
910 11556 git-gate
                $poll = array(
911 11556 git-gate
                        'poll_title'                => '',
912 11556 git-gate
                        'poll_length'                => 0,
913 11556 git-gate
                        'poll_max_options'        => 0,
914 11556 git-gate
                        'poll_option_text'        => '',
915 11556 git-gate
                        'poll_start'                => 0,
916 11556 git-gate
                        'poll_last_vote'        => 0,
917 11556 git-gate
                        'poll_vote_change'        => 0,
918 11556 git-gate
                        'poll_options'                => array(),
919 11556 git-gate
                );
920 11556 git-gate
921 11607 git-gate
                $post_data['poll_options'] = array();
922 11607 git-gate
                $post_data['poll_title'] = '';
923 11556 git-gate
                $post_data['poll_start'] = $post_data['poll_length'] = $post_data['poll_max_options'] = $post_data['poll_last_vote'] = $post_data['poll_vote_change'] = 0;
924 11556 git-gate
        }
925 10753 git-gate
        else if (!$auth->acl_get('f_poll', $forum_id) && ($mode == 'edit') && ($post_id == $post_data['topic_first_post_id']) && ($original_poll_data['poll_title'] != ''))
926 10753 git-gate
        {
927 10753 git-gate
                // We have a poll but the editing user is not permitted to create/edit it.
928 10753 git-gate
                // So we just keep the original poll-data.
929 10753 git-gate
                $poll = array_merge($original_poll_data, array(
930 10753 git-gate
                        'enable_bbcode'                => $post_data['enable_bbcode'],
931 10753 git-gate
                        'enable_urls'                => $post_data['enable_urls'],
932 10753 git-gate
                        'enable_smilies'        => $post_data['enable_smilies'],
933 10753 git-gate
                        'img_status'                => $img_status,
934 10753 git-gate
                ));
935 10753 git-gate
936 10753 git-gate
                $message_parser->parse_poll($poll);
937 10753 git-gate
938 11607 git-gate
                $post_data['poll_options'] = (isset($poll['poll_options'])) ? $poll['poll_options'] : array();
939 10753 git-gate
                $post_data['poll_title'] = (isset($poll['poll_title'])) ? $poll['poll_title'] : '';
940 10753 git-gate
        }
941 4981 acydburn
        else
942 4981 acydburn
        {
943 4981 acydburn
                $poll = array();
944 4981 acydburn
        }
945 4981 acydburn
946 2983 psotfx
        // Check topic type
947 5902 acydburn
        if ($post_data['topic_type'] != POST_NORMAL && ($mode == 'post' || ($mode == 'edit' && $post_data['topic_first_post_id'] == $post_id)))
948 2983 psotfx
        {
949 5902 acydburn
                switch ($post_data['topic_type'])
950 2983 psotfx
                {
951 3980 psotfx
                        case POST_GLOBAL:
952 3553 acydburn
                        case POST_ANNOUNCE:
953 4167 psotfx
                                $auth_option = 'f_announce';
954 5486 acydburn
                        break;
955 5486 acydburn
956 3553 acydburn
                        case POST_STICKY:
957 4167 psotfx
                                $auth_option = 'f_sticky';
958 5486 acydburn
                        break;
959 6015 acydburn
960 4167 psotfx
                        default:
961 4167 psotfx
                                $auth_option = '';
962 5902 acydburn
                        break;
963 2983 psotfx
                }
964 2983 psotfx
965 4167 psotfx
                if (!$auth->acl_get($auth_option, $forum_id))
966 2983 psotfx
                {
967 7241 acydburn
                        // There is a special case where a user edits his post whereby the topic type got changed by an admin/mod.
968 7241 acydburn
                        // Another case would be a mod not having sticky permissions for example but edit permissions.
969 7241 acydburn
                        if ($mode == 'edit')
970 6894 acydburn
                        {
971 6894 acydburn
                                // To prevent non-authed users messing around with the topic type we reset it to the original one.
972 6894 acydburn
                                $post_data['topic_type'] = $post_data['orig_topic_type'];
973 6894 acydburn
                        }
974 6894 acydburn
                        else
975 6894 acydburn
                        {
976 6894 acydburn
                                $error[] = $user->lang['CANNOT_POST_' . str_replace('F_', '', strtoupper($auth_option))];
977 6894 acydburn
                        }
978 2983 psotfx
                }
979 2983 psotfx
        }
980 2983 psotfx
981 6414 acydburn
        if (sizeof($message_parser->warn_msg))
982 4184 acydburn
        {
983 4184 acydburn
                $error[] = implode('<br />', $message_parser->warn_msg);
984 4184 acydburn
        }
985 4184 acydburn
986 6414 acydburn
        // DNSBL check
987 6414 acydburn
        if ($config['check_dnsbl'] && !$refresh)
988 6414 acydburn
        {
989 6698 acydburn
                if (($dnsbl = $user->check_dnsbl('post')) !== false)
990 6414 acydburn
                {
991 6414 acydburn
                        $error[] = sprintf($user->lang['IP_BLACKLISTED'], $user->ip, $dnsbl[1]);
992 6414 acydburn
                }
993 6414 acydburn
        }
994 6414 acydburn
995 2981 psotfx
        // Store message, sync counters
996 4167 psotfx
        if (!sizeof($error) && $submit)
997 2972 psotfx
        {
998 4460 acydburn
                // Check if we want to de-globalize the topic... and ask for new forum
999 5902 acydburn
                if ($post_data['topic_type'] != POST_GLOBAL)
1000 3817 acydburn
                {
1001 4461 acydburn
                        $sql = 'SELECT topic_type, forum_id
1002 4460 acydburn
                                FROM ' . TOPICS_TABLE . "
1003 4460 acydburn
                                WHERE topic_id = $topic_id";
1004 7687 acydburn
                        $result = $db->sql_query($sql);
1005 4460 acydburn
                        $row = $db->sql_fetchrow($result);
1006 5902 acydburn
                        $db->sql_freeresult($result);
1007 4970 psotfx
1008 4767 acydburn
                        if ($row && !$row['forum_id'] && $row['topic_type'] == POST_GLOBAL)
1009 4460 acydburn
                        {
1010 4539 acydburn
                                $to_forum_id = request_var('to_forum_id', 0);
1011 4970 psotfx
1012 7687 acydburn
                                if ($to_forum_id)
1013 7687 acydburn
                                {
1014 7687 acydburn
                                        $sql = 'SELECT forum_type
1015 7687 acydburn
                                                FROM ' . FORUMS_TABLE . '
1016 7687 acydburn
                                                WHERE forum_id = ' . $to_forum_id;
1017 7687 acydburn
                                        $result = $db->sql_query($sql);
1018 7687 acydburn
                                        $forum_type = (int) $db->sql_fetchfield('forum_type');
1019 7687 acydburn
                                        $db->sql_freeresult($result);
1020 7687 acydburn
1021 10427 jelly_doughnut
                                        if ($forum_type != FORUM_POST || !$auth->acl_get('f_post', $to_forum_id) || (!$auth->acl_get('m_approve', $to_forum_id) && !$auth->acl_get('f_noapprove', $to_forum_id)))
1022 7687 acydburn
                                        {
1023 7687 acydburn
                                                $to_forum_id = 0;
1024 7687 acydburn
                                        }
1025 7687 acydburn
                                }
1026 7687 acydburn
1027 4460 acydburn
                                if (!$to_forum_id)
1028 4460 acydburn
                                {
1029 5633 acydburn
                                        include_once($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
1030 5633 acydburn
1031 4460 acydburn
                                        $template->assign_vars(array(
1032 7150 acydburn
                                                'S_FORUM_SELECT'        => make_forum_select(false, false, false, true, true, true),
1033 4970 psotfx
                                                'S_UNGLOBALISE'                => true)
1034 4460 acydburn
                                        );
1035 4970 psotfx
1036 4767 acydburn
                                        $submit = false;
1037 4767 acydburn
                                        $refresh = true;
1038 4460 acydburn
                                }
1039 4460 acydburn
                                else
1040 4460 acydburn
                                {
1041 7150 acydburn
                                        if (!$auth->acl_get('f_post', $to_forum_id))
1042 7150 acydburn
                                        {
1043 7150 acydburn
                                                // This will only be triggered if the user tried to trick the forum.
1044 7242 acydburn
                                                trigger_error('NOT_AUTHORISED');
1045 7150 acydburn
                                        }
1046 7150 acydburn
1047 4460 acydburn
                                        $forum_id = $to_forum_id;
1048 4460 acydburn
                                }
1049 4460 acydburn
                        }
1050 3817 acydburn
                }
1051 3817 acydburn
1052 4460 acydburn
                if ($submit)
1053 3817 acydburn
                {
1054 4460 acydburn
                        // Lock/Unlock Topic
1055 5902 acydburn
                        $change_topic_status = $post_data['topic_status'];
1056 6317 acydburn
                        $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;
1057 3817 acydburn
1058 5902 acydburn
                        if ($post_data['topic_status'] == ITEM_LOCKED && !$topic_lock && $perm_lock_unlock)
1059 4460 acydburn
                        {
1060 4460 acydburn
                                $change_topic_status = ITEM_UNLOCKED;
1061 4460 acydburn
                        }
1062 5902 acydburn
                        else if ($post_data['topic_status'] == ITEM_UNLOCKED && $topic_lock && $perm_lock_unlock)
1063 4460 acydburn
                        {
1064 4460 acydburn
                                $change_topic_status = ITEM_LOCKED;
1065 4460 acydburn
                        }
1066 4970 psotfx
1067 5902 acydburn
                        if ($change_topic_status != $post_data['topic_status'])
1068 4460 acydburn
                        {
1069 4460 acydburn
                                $sql = 'UPDATE ' . TOPICS_TABLE . "
1070 4460 acydburn
                                        SET topic_status = $change_topic_status
1071 4460 acydburn
                                        WHERE topic_id = $topic_id
1072 4460 acydburn
                                                AND topic_moved_id = 0";
1073 4460 acydburn
                                $db->sql_query($sql);
1074 4970 psotfx
1075 5902 acydburn
                                $user_lock = ($auth->acl_get('f_user_lock', $forum_id) && $user->data['is_registered'] && $user->data['user_id'] == $post_data['topic_poster']) ? 'USER_' : '';
1076 4767 acydburn
1077 5902 acydburn
                                add_log('mod', $forum_id, $topic_id, 'LOG_' . $user_lock . (($change_topic_status == ITEM_LOCKED) ? 'LOCK' : 'UNLOCK'), $post_data['topic_title']);
1078 4460 acydburn
                        }
1079 4460 acydburn
1080 4460 acydburn
                        // Lock/Unlock Post Edit
1081 5902 acydburn
                        if ($mode == 'edit' && $post_data['post_edit_locked'] == ITEM_LOCKED && !$post_lock && $auth->acl_get('m_edit', $forum_id))
1082 4460 acydburn
                        {
1083 5902 acydburn
                                $post_data['post_edit_locked'] = ITEM_UNLOCKED;
1084 4460 acydburn
                        }
1085 5902 acydburn
                        else if ($mode == 'edit' && $post_data['post_edit_locked'] == ITEM_UNLOCKED && $post_lock && $auth->acl_get('m_edit', $forum_id))
1086 4460 acydburn
                        {
1087 5902 acydburn
                                $post_data['post_edit_locked'] = ITEM_LOCKED;
1088 4460 acydburn
                        }
1089 4460 acydburn
1090 5902 acydburn
                        $data = array(
1091 5922 acydburn
                                'topic_title'                        => (empty($post_data['topic_title'])) ? $post_data['post_subject'] : $post_data['topic_title'],
1092 5902 acydburn
                                'topic_first_post_id'        => (isset($post_data['topic_first_post_id'])) ? (int) $post_data['topic_first_post_id'] : 0,
1093 5902 acydburn
                                'topic_last_post_id'        => (isset($post_data['topic_last_post_id'])) ? (int) $post_data['topic_last_post_id'] : 0,
1094 5902 acydburn
                                'topic_time_limit'                => (int) $post_data['topic_time_limit'],
1095 7114 acydburn
                                'topic_attachment'                => (isset($post_data['topic_attachment'])) ? (int) $post_data['topic_attachment'] : 0,
1096 4545 acydburn
                                'post_id'                                => (int) $post_id,
1097 4545 acydburn
                                'topic_id'                                => (int) $topic_id,
1098 4545 acydburn
                                'forum_id'                                => (int) $forum_id,
1099 5902 acydburn
                                'icon_id'                                => (int) $post_data['icon_id'],
1100 5902 acydburn
                                'poster_id'                                => (int) $post_data['poster_id'],
1101 5902 acydburn
                                'enable_sig'                        => (bool) $post_data['enable_sig'],
1102 5902 acydburn
                                'enable_bbcode'                        => (bool) $post_data['enable_bbcode'],
1103 5902 acydburn
                                'enable_smilies'                => (bool) $post_data['enable_smilies'],
1104 5902 acydburn
                                'enable_urls'                        => (bool) $post_data['enable_urls'],
1105 5902 acydburn
                                'enable_indexing'                => (bool) $post_data['enable_indexing'],
1106 4890 acydburn
                                'message_md5'                        => (string) $message_md5,
1107 5902 acydburn
                                'post_time'                                => (isset($post_data['post_time'])) ? (int) $post_data['post_time'] : $current_time,
1108 5902 acydburn
                                'post_checksum'                        => (isset($post_data['post_checksum'])) ? (string) $post_data['post_checksum'] : '',
1109 5902 acydburn
                                'post_edit_reason'                => $post_data['post_edit_reason'],
1110 5902 acydburn
                                'post_edit_user'                => ($mode == 'edit') ? $user->data['user_id'] : ((isset($post_data['post_edit_user'])) ? (int) $post_data['post_edit_user'] : 0),
1111 5902 acydburn
                                'forum_parents'                        => $post_data['forum_parents'],
1112 5902 acydburn
                                'forum_name'                        => $post_data['forum_name'],
1113 4460 acydburn
                                'notify'                                => $notify,
1114 5902 acydburn
                                'notify_set'                        => $post_data['notify_set'],
1115 5902 acydburn
                                'poster_ip'                                => (isset($post_data['poster_ip'])) ? $post_data['poster_ip'] : $user->ip,
1116 5902 acydburn
                                'post_edit_locked'                => (int) $post_data['post_edit_locked'],
1117 6209 davidmj
                                'bbcode_bitfield'                => $message_parser->bbcode_bitfield,
1118 4978 acydburn
                                'bbcode_uid'                        => $message_parser->bbcode_uid,
1119 4978 acydburn
                                'message'                                => $message_parser->message,
1120 4978 acydburn
                                'attachment_data'                => $message_parser->attachment_data,
1121 7519 acydburn
                                'filename_data'                        => $message_parser->filename_data,
1122 7519 acydburn
1123 7519 acydburn
                                'topic_approved'                => (isset($post_data['topic_approved'])) ? $post_data['topic_approved'] : false,
1124 7519 acydburn
                                'post_approved'                        => (isset($post_data['post_approved'])) ? $post_data['post_approved'] : false,
1125 4460 acydburn
                        );
1126 7537 davidmj
1127 7537 davidmj
                        if ($mode == 'edit')
1128 7537 davidmj
                        {
1129 7537 davidmj
                                $data['topic_replies_real'] = $post_data['topic_replies_real'];
1130 7831 davidmj
                                $data['topic_replies'] = $post_data['topic_replies'];
1131 7537 davidmj
                        }
1132 7537 davidmj
1133 9959 acydburn
                        // The last parameter tells submit_post if search indexer has to be run
1134 9959 acydburn
                        $redirect_url = submit_post($mode, $post_data['post_subject'], $post_data['username'], $post_data['topic_type'], $poll, $data, $update_message, ($update_message || $update_subject) ? true : false);
1135 9554 acydburn
1136 9999 Kellanved
                        if ($config['enable_post_confirm'] && !$user->data['is_registered'] && (isset($captcha) && $captcha->is_solved() === true) && ($mode == 'post' || $mode == 'reply' || $mode == 'quote'))
1137 9999 Kellanved
                        {
1138 9999 Kellanved
                                $captcha->reset();
1139 9999 Kellanved
                        }
1140 10166 acydburn
1141 9636 acydburn
                        // Check the permissions for post approval. Moderators are not affected.
1142 10508 jelly_doughnut
                        if ((!$auth->acl_get('f_noapprove', $data['forum_id']) && !$auth->acl_get('m_approve', $data['forum_id']) && empty($data['force_approved_state'])) || (isset($data['force_approved_state']) && !$data['force_approved_state']))
1143 7749 acydburn
                        {
1144 7749 acydburn
                                meta_refresh(10, $redirect_url);
1145 7749 acydburn
                                $message = ($mode == 'edit') ? $user->lang['POST_EDITED_MOD'] : $user->lang['POST_STORED_MOD'];
1146 7887 kellanved
                                $message .= (($user->data['user_id'] == ANONYMOUS) ? '' : ' '. $user->lang['POST_APPROVAL_NOTIFY']);
1147 7749 acydburn
                        }
1148 7749 acydburn
                        else
1149 7749 acydburn
                        {
1150 7749 acydburn
                                meta_refresh(3, $redirect_url);
1151 5902 acydburn
1152 7749 acydburn
                                $message = ($mode == 'edit') ? 'POST_EDITED' : 'POST_STORED';
1153 7749 acydburn
                                $message = $user->lang[$message] . '<br /><br />' . sprintf($user->lang['VIEW_MESSAGE'], '<a href="' . $redirect_url . '">', '</a>');
1154 7749 acydburn
                        }
1155 7749 acydburn
1156 6015 acydburn
                        $message .= '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $data['forum_id']) . '">', '</a>');
1157 5902 acydburn
                        trigger_error($message);
1158 4460 acydburn
                }
1159 4970 psotfx
        }
1160 3572 acydburn
}
1161 2983 psotfx
1162 4139 acydburn
// Preview
1163 4167 psotfx
if (!sizeof($error) && $preview)
1164 3553 acydburn
{
1165 5902 acydburn
        $post_data['post_time'] = ($mode == 'edit') ? $post_data['post_time'] : $current_time;
1166 3812 ludovic_arnaud
1167 5902 acydburn
        $preview_message = $message_parser->format_display($post_data['enable_bbcode'], $post_data['enable_urls'], $post_data['enable_smilies'], false);
1168 4167 psotfx
1169 5902 acydburn
        $preview_signature = ($mode == 'edit') ? $post_data['user_sig'] : $user->data['user_sig'];
1170 5902 acydburn
        $preview_signature_uid = ($mode == 'edit') ? $post_data['user_sig_bbcode_uid'] : $user->data['user_sig_bbcode_uid'];
1171 5902 acydburn
        $preview_signature_bitfield = ($mode == 'edit') ? $post_data['user_sig_bbcode_bitfield'] : $user->data['user_sig_bbcode_bitfield'];
1172 4170 psotfx
1173 4978 acydburn
        // Signature
1174 5902 acydburn
        if ($post_data['enable_sig'] && $config['allow_sig'] && $preview_signature && $auth->acl_get('f_sigs', $forum_id))
1175 4978 acydburn
        {
1176 4978 acydburn
                $parse_sig = new parse_message($preview_signature);
1177 4978 acydburn
                $parse_sig->bbcode_uid = $preview_signature_uid;
1178 4978 acydburn
                $parse_sig->bbcode_bitfield = $preview_signature_bitfield;
1179 3812 ludovic_arnaud
1180 4978 acydburn
                // Not sure about parameters for bbcode/smilies/urls... in signatures
1181 10568 git-gate
                $parse_sig->format_display($config['allow_sig_bbcode'], $config['allow_sig_links'], $config['allow_sig_smilies']);
1182 4978 acydburn
                $preview_signature = $parse_sig->message;
1183 4978 acydburn
                unset($parse_sig);
1184 4978 acydburn
        }
1185 4978 acydburn
        else
1186 4978 acydburn
        {
1187 4978 acydburn
                $preview_signature = '';
1188 4978 acydburn
        }
1189 6015 acydburn
1190 5922 acydburn
        $preview_subject = censor_text($post_data['post_subject']);
1191 6015 acydburn
1192 3631 acydburn
        // Poll Preview
1193 7766 acydburn
        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))*/))
1194 4981 acydburn
        && $auth->acl_get('f_poll', $forum_id))
1195 3572 acydburn
        {
1196 5902 acydburn
                $parse_poll = new parse_message($post_data['poll_title']);
1197 4981 acydburn
                $parse_poll->bbcode_uid = $message_parser->bbcode_uid;
1198 4981 acydburn
                $parse_poll->bbcode_bitfield = $message_parser->bbcode_bitfield;
1199 4981 acydburn
1200 5902 acydburn
                $parse_poll->format_display($post_data['enable_bbcode'], $post_data['enable_urls'], $post_data['enable_smilies']);
1201 6015 acydburn
1202 7749 acydburn
                if ($post_data['poll_length'])
1203 7749 acydburn
                {
1204 7749 acydburn
                        $poll_end = ($post_data['poll_length'] * 86400) + (($post_data['poll_start']) ? $post_data['poll_start'] : time());
1205 7749 acydburn
                }
1206 7749 acydburn
1207 3631 acydburn
                $template->assign_vars(array(
1208 6015 acydburn
                        'S_HAS_POLL_OPTIONS'        => (sizeof($post_data['poll_options'])),
1209 6015 acydburn
                        'S_IS_MULTI_CHOICE'                => ($post_data['poll_max_options'] > 1) ? true : false,
1210 4981 acydburn
1211 4981 acydburn
                        'POLL_QUESTION'                => $parse_poll->message,
1212 8350 acydburn
1213 7749 acydburn
                        'L_POLL_LENGTH'                => ($post_data['poll_length']) ? sprintf($user->lang['POLL_RUN_TILL'], $user->format_date($poll_end)) : '',
1214 5902 acydburn
                        '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']))
1215 3631 acydburn
                );
1216 3631 acydburn
1217 5902 acydburn
                $parse_poll->message = implode("\n", $post_data['poll_options']);
1218 5902 acydburn
                $parse_poll->format_display($post_data['enable_bbcode'], $post_data['enable_urls'], $post_data['enable_smilies']);
1219 4981 acydburn
                $preview_poll_options = explode('<br />', $parse_poll->message);
1220 4981 acydburn
                unset($parse_poll);
1221 4981 acydburn
1222 7917 davidmj
                foreach ($preview_poll_options as $key => $option)
1223 3631 acydburn
                {
1224 6015 acydburn
                        $template->assign_block_vars('poll_option', array(
1225 7917 davidmj
                                'POLL_OPTION_CAPTION'        => $option,
1226 7917 davidmj
                                'POLL_OPTION_ID'                => $key + 1)
1227 6015 acydburn
                        );
1228 3631 acydburn
                }
1229 4981 acydburn
                unset($preview_poll_options);
1230 3572 acydburn
        }
1231 4139 acydburn
1232 4139 acydburn
        // Attachment Preview
1233 4139 acydburn
        if (sizeof($message_parser->attachment_data))
1234 4139 acydburn
        {
1235 4767 acydburn
                $template->assign_var('S_HAS_ATTACHMENTS', true);
1236 4984 acydburn
1237 6803 acydburn
                $update_count = array();
1238 4984 acydburn
                $attachment_data = $message_parser->attachment_data;
1239 4984 acydburn
1240 6803 acydburn
                parse_attachments($forum_id, $preview_message, $attachment_data, $update_count, true);
1241 4984 acydburn
1242 4984 acydburn
                foreach ($attachment_data as $i => $attachment)
1243 4984 acydburn
                {
1244 4984 acydburn
                        $template->assign_block_vars('attachment', array(
1245 4984 acydburn
                                'DISPLAY_ATTACHMENT'        => $attachment)
1246 4984 acydburn
                        );
1247 4984 acydburn
                }
1248 6803 acydburn
                unset($attachment_data);
1249 4139 acydburn
        }
1250 3553 acydburn
1251 4978 acydburn
        if (!sizeof($error))
1252 4978 acydburn
        {
1253 4978 acydburn
                $template->assign_vars(array(
1254 4978 acydburn
                        'PREVIEW_SUBJECT'                => $preview_subject,
1255 4978 acydburn
                        'PREVIEW_MESSAGE'                => $preview_message,
1256 4978 acydburn
                        'PREVIEW_SIGNATURE'                => $preview_signature,
1257 4167 psotfx
1258 4978 acydburn
                        'S_DISPLAY_PREVIEW'                => true)
1259 4978 acydburn
                );
1260 4978 acydburn
        }
1261 3858 ludovic_arnaud
}
1262 987 psotfx
1263 4978 acydburn
// Decode text for message display
1264 5902 acydburn
$post_data['bbcode_uid'] = ($mode == 'quote' && !$preview && !$refresh && !sizeof($error)) ? $post_data['bbcode_uid'] : $message_parser->bbcode_uid;
1265 5902 acydburn
$message_parser->decode_message($post_data['bbcode_uid']);
1266 3631 acydburn
1267 6022 acydburn
if ($mode == 'quote' && !$submit && !$preview && !$refresh)
1268 3572 acydburn
{
1269 9835 Kellanved
        if ($config['allow_bbcode'])
1270 9835 Kellanved
        {
1271 9835 Kellanved
                $message_parser->message = '[quote=&quot;' . $post_data['quote_username'] . '&quot;]' . censor_text(trim($message_parser->message)) . "[/quote]\n";
1272 9835 Kellanved
        }
1273 9835 Kellanved
        else
1274 9835 Kellanved
        {
1275 9838 Kellanved
                $offset = 0;
1276 9838 Kellanved
                $quote_string = "&gt; ";
1277 9838 Kellanved
                $message = censor_text(trim($message_parser->message));
1278 9838 Kellanved
                // see if we are nesting. It's easily tricked but should work for one level of nesting
1279 9838 Kellanved
                if (strpos($message, "&gt;") !== false)
1280 9838 Kellanved
                {
1281 9838 Kellanved
                        $offset = 10;
1282 9838 Kellanved
                }
1283 9838 Kellanved
                $message = utf8_wordwrap($message, 75 + $offset, "\n");
1284 9838 Kellanved
1285 9838 Kellanved
                $message = $quote_string . $message;
1286 9838 Kellanved
                $message = str_replace("\n", "\n" . $quote_string, $message);
1287 10659 git-gate
                $message_parser->message =  $post_data['quote_username'] . " " . $user->lang['WROTE'] . ":\n" . $message . "\n";
1288 9835 Kellanved
        }
1289 3572 acydburn
}
1290 3572 acydburn
1291 6022 acydburn
if (($mode == 'reply' || $mode == 'quote') && !$submit && !$preview && !$refresh)
1292 3631 acydburn
{
1293 7354 shs
        $post_data['post_subject'] = ((strpos($post_data['post_subject'], 'Re: ') !== 0) ? 'Re: ' : '') . censor_text($post_data['post_subject']);
1294 3631 acydburn
}
1295 3631 acydburn
1296 4978 acydburn
$attachment_data = $message_parser->attachment_data;
1297 4978 acydburn
$filename_data = $message_parser->filename_data;
1298 5902 acydburn
$post_data['post_text'] = $message_parser->message;
1299 4981 acydburn
1300 10806 git-gate
if (sizeof($post_data['poll_options']) || !empty($post_data['poll_title']))
1301 4981 acydburn
{
1302 5902 acydburn
        $message_parser->message = $post_data['poll_title'];
1303 5902 acydburn
        $message_parser->bbcode_uid = $post_data['bbcode_uid'];
1304 4981 acydburn
1305 4981 acydburn
        $message_parser->decode_message();
1306 5902 acydburn
        $post_data['poll_title'] = $message_parser->message;
1307 4981 acydburn
1308 5902 acydburn
        $message_parser->message = implode("\n", $post_data['poll_options']);
1309 4981 acydburn
        $message_parser->decode_message();
1310 5902 acydburn
        $post_data['poll_options'] = explode("\n", $message_parser->message);
1311 4981 acydburn
}
1312 4167 psotfx
1313 2923 psotfx
// MAIN POSTING PAGE BEGINS HERE
1314 470 thefinn
1315 3014 psotfx
// Forum moderators?
1316 5902 acydburn
$moderators = array();
1317 9640 acydburn
if ($config['load_moderators'])
1318 9640 acydburn
{
1319 9640 acydburn
        get_moderators($moderators, $forum_id);
1320 9640 acydburn
}
1321 3014 psotfx
1322 5108 acydburn
// Generate smiley listing
1323 4544 acydburn
generate_smilies('inline', $forum_id);
1324 487 psotfx
1325 4819 acydburn
// Generate inline attachment select box
1326 4978 acydburn
posting_gen_inline_attachments($attachment_data);
1327 4819 acydburn
1328 4968 acydburn
// Do show topic type selection only in first post.
1329 4968 acydburn
$topic_type_toggle = false;
1330 4919 acydburn
1331 5902 acydburn
if ($mode == 'post' || ($mode == 'edit' && $post_id == $post_data['topic_first_post_id']))
1332 3553 acydburn
{
1333 5902 acydburn
        $topic_type_toggle = posting_gen_topic_types($forum_id, $post_data['topic_type']);
1334 4968 acydburn
}
1335 4919 acydburn
1336 4968 acydburn
$s_topic_icons = false;
1337 7490 davidmj
if ($post_data['enable_icons'] && $auth->acl_get('f_icons', $forum_id))
1338 4968 acydburn
{
1339 5902 acydburn
        $s_topic_icons = posting_gen_topic_icons($mode, $post_data['icon_id']);
1340 487 psotfx
}
1341 323 thefinn
1342 5902 acydburn
$bbcode_checked                = (isset($post_data['enable_bbcode'])) ? !$post_data['enable_bbcode'] : (($config['allow_bbcode']) ? !$user->optionget('bbcode') : 1);
1343 5902 acydburn
$smilies_checked        = (isset($post_data['enable_smilies'])) ? !$post_data['enable_smilies'] : (($config['allow_smilies']) ? !$user->optionget('smilies') : 1);
1344 5902 acydburn
$urls_checked                = (isset($post_data['enable_urls'])) ? !$post_data['enable_urls'] : 0;
1345 5902 acydburn
$sig_checked                = $post_data['enable_sig'];
1346 8138 acydburn
$lock_topic_checked        = (isset($topic_lock) && $topic_lock) ? $topic_lock : (($post_data['topic_status'] == ITEM_LOCKED) ? 1 : 0);
1347 5902 acydburn
$lock_post_checked        = (isset($post_lock)) ? $post_lock : $post_data['post_edit_locked'];
1348 2983 psotfx
1349 6527 acydburn
// 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
1350 6527 acydburn
$notify_set                        = ($mode != 'edit' && $config['allow_topic_notify'] && $user->data['is_registered'] && !$post_data['notify_set']) ? $user->data['user_notify'] : $post_data['notify_set'];
1351 6527 acydburn
$notify_checked                = (isset($notify)) ? $notify : (($mode == 'post') ? $user->data['user_notify'] : $notify_set);
1352 5902 acydburn
1353 10976 git-gate
// Page title & action URL
1354 10976 git-gate
$s_action = append_sid("{$phpbb_root_path}posting.$phpEx", "mode=$mode&amp;f=$forum_id");
1355 4139 acydburn
$s_action .= ($topic_id) ? "&amp;t=$topic_id" : '';
1356 4139 acydburn
$s_action .= ($post_id) ? "&amp;p=$post_id" : '';
1357 3575 acydburn
1358 3354 psotfx
switch ($mode)
1359 836 psotfx
{
1360 2972 psotfx
        case 'post':
1361 3022 psotfx
                $page_title = $user->lang['POST_TOPIC'];
1362 5486 acydburn
        break;
1363 824 psotfx
1364 3553 acydburn
        case 'quote':
1365 987 psotfx
        case 'reply':
1366 3022 psotfx
                $page_title = $user->lang['POST_REPLY'];
1367 5486 acydburn
        break;
1368 987 psotfx
1369 3575 acydburn
        case 'delete':
1370 2972 psotfx
        case 'edit':
1371 3061 psotfx
                $page_title = $user->lang['EDIT_POST'];
1372 5902 acydburn
        break;
1373 836 psotfx
}
1374 824 psotfx
1375 4904 acydburn
// Build Navigation Links
1376 5902 acydburn
generate_forum_nav($post_data);
1377 3354 psotfx
1378 4904 acydburn
// Build Forum Rules
1379 5902 acydburn
generate_forum_rules($post_data);
1380 4903 acydburn
1381 9960 Kellanved
// Posting uses is_solved for legacy reasons. Plugins have to use is_solved to force themselves to be displayed.
1382 9679 Kellanved
if ($config['enable_post_confirm'] && !$user->data['is_registered'] && (isset($captcha) && $captcha->is_solved() === false) && ($mode == 'post' || $mode == 'reply' || $mode == 'quote'))
1383 5739 davidmj
{
1384 5739 davidmj
1385 6601 acydburn
        $template->assign_vars(array(
1386 6601 acydburn
                'S_CONFIRM_CODE'                        => true,
1387 9609 Kellanved
                'CAPTCHA_TEMPLATE'                        => $captcha->get_template(),
1388 6601 acydburn
        ));
1389 5739 davidmj
}
1390 5739 davidmj
1391 5902 acydburn
$s_hidden_fields = ($mode == 'reply' || $mode == 'quote') ? '<input type="hidden" name="topic_cur_post_id" value="' . $post_data['topic_last_post_id'] . '" />' : '';
1392 4625 acydburn
$s_hidden_fields .= '<input type="hidden" name="lastclick" value="' . $current_time . '" />';
1393 5902 acydburn
$s_hidden_fields .= ($draft_id || isset($_REQUEST['draft_loaded'])) ? '<input type="hidden" name="draft_loaded" value="' . request_var('draft_loaded', $draft_id) . '" />' : '';
1394 3631 acydburn
1395 9731 bantu
if ($mode == 'edit')
1396 9731 bantu
{
1397 9731 bantu
        $s_hidden_fields .= build_hidden_fields(array(
1398 9731 bantu
                'edit_post_message_checksum'        => $post_data['post_checksum'],
1399 9731 bantu
                'edit_post_subject_checksum'        => $post_data['post_subject_md5'],
1400 9731 bantu
        ));
1401 9731 bantu
}
1402 9731 bantu
1403 6601 acydburn
// Add the confirm id/code pair to the hidden fields, else an error is displayed on next submit/preview
1404 9680 Kellanved
if (isset($captcha) && $captcha->is_solved() !== false)
1405 6601 acydburn
{
1406 9524 Kellanved
        $s_hidden_fields .= build_hidden_fields($captcha->get_hidden_fields());
1407 6601 acydburn
}
1408 6601 acydburn
1409 8883 acydburn
$form_enctype = (@ini_get('file_uploads') == '0' || strtolower(@ini_get('file_uploads')) == 'off' || !$config['allow_attachments'] || !$auth->acl_get('u_attach') || !$auth->acl_get('f_attach', $forum_id)) ? '' : ' enctype="multipart/form-data"';
1410 8120 kellanved
add_form_key('posting');
1411 3631 acydburn
1412 8120 kellanved
1413 2923 psotfx
// Start assigning vars for main posting page ...
1414 2183 psotfx
$template->assign_vars(array(
1415 6015 acydburn
        'L_POST_A'                                        => $page_title,
1416 6015 acydburn
        'L_ICON'                                        => ($mode == 'reply' || $mode == 'quote' || ($mode == 'edit' && $post_id != $post_data['topic_first_post_id'])) ? $user->lang['POST_ICON'] : $user->lang['TOPIC_ICON'],
1417 6015 acydburn
        'L_MESSAGE_BODY_EXPLAIN'        => (intval($config['max_post_chars'])) ? sprintf($user->lang['MESSAGE_BODY_EXPLAIN'], intval($config['max_post_chars'])) : '',
1418 1609 psotfx
1419 6015 acydburn
        'FORUM_NAME'                        => $post_data['forum_name'],
1420 6188 davidmj
        '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']) : '',
1421 6135 acydburn
        'TOPIC_TITLE'                        => censor_text($post_data['topic_title']),
1422 6015 acydburn
        'MODERATORS'                        => (sizeof($moderators)) ? implode(', ', $moderators[$forum_id]) : '',
1423 5902 acydburn
        'USERNAME'                                => ((!$preview && $mode != 'quote') || $preview) ? $post_data['username'] : '',
1424 5902 acydburn
        'SUBJECT'                                => $post_data['post_subject'],
1425 5902 acydburn
        'MESSAGE'                                => $post_data['post_text'],
1426 6364 acydburn
        '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>'),
1427 3572 acydburn
        'IMG_STATUS'                        => ($img_status) ? $user->lang['IMAGES_ARE_ON'] : $user->lang['IMAGES_ARE_OFF'],
1428 3572 acydburn
        'FLASH_STATUS'                        => ($flash_status) ? $user->lang['FLASH_IS_ON'] : $user->lang['FLASH_IS_OFF'],
1429 3572 acydburn
        'SMILIES_STATUS'                => ($smilies_status) ? $user->lang['SMILIES_ARE_ON'] : $user->lang['SMILIES_ARE_OFF'],
1430 7241 acydburn
        'URL_STATUS'                        => ($bbcode_status && $url_status) ? $user->lang['URL_IS_ON'] : $user->lang['URL_IS_OFF'],
1431 9365 toonarmy
        'MAX_FONT_SIZE'                        => (int) $config['max_post_font_size'],
1432 6237 acydburn
        'MINI_POST_IMG'                        => $user->img('icon_post_target', $user->lang['POST']),
1433 5902 acydburn
        'POST_DATE'                                => ($post_data['post_time']) ? $user->format_date($post_data['post_time']) : '',
1434 4970 psotfx
        'ERROR'                                        => (sizeof($error)) ? implode('<br />', $error) : '',
1435 5902 acydburn
        'TOPIC_TIME_LIMIT'                => (int) $post_data['topic_time_limit'],
1436 5902 acydburn
        'EDIT_REASON'                        => $post_data['post_edit_reason'],
1437 6015 acydburn
        'U_VIEW_FORUM'                        => append_sid("{$phpbb_root_path}viewforum.$phpEx", "f=$forum_id"),
1438 6601 acydburn
        'U_VIEW_TOPIC'                        => ($mode != 'post') ? append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&amp;t=$topic_id") : '',
1439 6015 acydburn
        'U_PROGRESS_BAR'                => append_sid("{$phpbb_root_path}posting.$phpEx", "f=$forum_id&amp;mode=popup"),
1440 8099 acydburn
        'UA_PROGRESS_BAR'                => addslashes(append_sid("{$phpbb_root_path}posting.$phpEx", "f=$forum_id&amp;mode=popup")),
1441 1609 psotfx
1442 5858 acydburn
        'S_PRIVMSGS'                                => false,
1443 5858 acydburn
        'S_CLOSE_PROGRESS_WINDOW'        => (isset($_POST['add_file'])) ? true : false,
1444 5858 acydburn
        'S_EDIT_POST'                                => ($mode == 'edit') ? true : false,
1445 5858 acydburn
        'S_EDIT_REASON'                                => ($mode == 'edit' && $auth->acl_get('m_edit', $forum_id)) ? true : false,
1446 7138 acydburn
        'S_DISPLAY_USERNAME'                => (!$user->data['is_registered'] || ($mode == 'edit' && $post_data['poster_id'] == ANONYMOUS)) ? true : false,
1447 5902 acydburn
        'S_SHOW_TOPIC_ICONS'                => $s_topic_icons,
1448 10080 nickvergessen
        '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) && !$post_data['post_edit_locked'] && ($post_data['post_time'] > time() - ($config['delete_time'] * 60) || !$config['delete_time'])) || $auth->acl_get('m_delete', $forum_id))) ? true : false,
1449 10615 git-gate
        'S_BBCODE_ALLOWED'                        => ($bbcode_status) ? 1 : 0,
1450 6015 acydburn
        'S_BBCODE_CHECKED'                        => ($bbcode_checked) ? ' checked="checked"' : '',
1451 5902 acydburn
        'S_SMILIES_ALLOWED'                        => $smilies_status,
1452 5902 acydburn
        'S_SMILIES_CHECKED'                        => ($smilies_checked) ? ' checked="checked"' : '',
1453 5902 acydburn
        'S_SIG_ALLOWED'                                => ($auth->acl_get('f_sigs', $forum_id) && $config['allow_sig'] && $user->data['is_registered']) ? true : false,
1454 5902 acydburn
        'S_SIGNATURE_CHECKED'                => ($sig_checked) ? ' checked="checked"' : '',
1455 7732 kellanved
        '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,
1456 6015 acydburn
        'S_NOTIFY_CHECKED'                        => ($notify_checked) ? ' checked="checked"' : '',
1457 6317 acydburn
        '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,
1458 5902 acydburn
        'S_LOCK_TOPIC_CHECKED'                => ($lock_topic_checked) ? ' checked="checked"' : '',
1459 5902 acydburn
        'S_LOCK_POST_ALLOWED'                => ($mode == 'edit' && $auth->acl_get('m_edit', $forum_id)) ? true : false,
1460 5902 acydburn
        'S_LOCK_POST_CHECKED'                => ($lock_post_checked) ? ' checked="checked"' : '',
1461 6364 acydburn
        'S_LINKS_ALLOWED'                        => $url_status,
1462 5902 acydburn
        'S_MAGIC_URL_CHECKED'                => ($urls_checked) ? ' checked="checked"' : '',
1463 5902 acydburn
        'S_TYPE_TOGGLE'                                => $topic_type_toggle,
1464 7384 acydburn
        'S_SAVE_ALLOWED'                        => ($auth->acl_get('u_savedrafts') && $user->data['is_registered'] && $mode != 'edit') ? true : false,
1465 5902 acydburn
        'S_HAS_DRAFTS'                                => ($auth->acl_get('u_savedrafts') && $user->data['is_registered'] && $post_data['drafts']) ? true : false,
1466 5902 acydburn
        'S_FORM_ENCTYPE'                        => $form_enctype,
1467 3697 acydburn
1468 5603 acydburn
        'S_BBCODE_IMG'                        => $img_status,
1469 6364 acydburn
        'S_BBCODE_URL'                        => $url_status,
1470 5603 acydburn
        'S_BBCODE_FLASH'                => $flash_status,
1471 5603 acydburn
        'S_BBCODE_QUOTE'                => $quote_status,
1472 5603 acydburn
1473 6015 acydburn
        'S_POST_ACTION'                        => $s_action,
1474 3631 acydburn
        'S_HIDDEN_FIELDS'                => $s_hidden_fields)
1475 487 psotfx
);
1476 347 psotfx
1477 5603 acydburn
// Build custom bbcodes array
1478 6149 acydburn
display_custom_bbcodes();
1479 5603 acydburn
1480 3631 acydburn
// Poll entry
1481 7766 acydburn
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))*/))
1482 4981 acydburn
        && $auth->acl_get('f_poll', $forum_id))
1483 3631 acydburn
{
1484 3631 acydburn
        $template->assign_vars(array(
1485 4767 acydburn
                'S_SHOW_POLL_BOX'                => true,
1486 9470 acydburn
                'S_POLL_VOTE_CHANGE'        => ($auth->acl_get('f_votechg', $forum_id) && $auth->acl_get('f_vote', $forum_id)),
1487 5902 acydburn
                '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))),
1488 6513 acydburn
                'S_POLL_DELETE_CHECKED'        => (!empty($poll_delete)) ? true : false,
1489 3631 acydburn
1490 7766 acydburn
                'L_POLL_OPTIONS_EXPLAIN'        => sprintf($user->lang['POLL_OPTIONS_' . (($mode == 'edit') ? 'EDIT_' : '') . 'EXPLAIN'], $config['max_poll_options']),
1491 3631 acydburn
1492 5902 acydburn
                'VOTE_CHANGE_CHECKED'        => (!empty($post_data['poll_vote_change'])) ? ' checked="checked"' : '',
1493 6015 acydburn
                'POLL_TITLE'                        => (isset($post_data['poll_title'])) ? $post_data['poll_title'] : '',
1494 5902 acydburn
                'POLL_OPTIONS'                        => (!empty($post_data['poll_options'])) ? implode("\n", $post_data['poll_options']) : '',
1495 5902 acydburn
                'POLL_MAX_OPTIONS'                => (isset($post_data['poll_max_options'])) ? (int) $post_data['poll_max_options'] : 1,
1496 6015 acydburn
                'POLL_LENGTH'                        => $post_data['poll_length'])
1497 3631 acydburn
        );
1498 3631 acydburn
}
1499 3631 acydburn
1500 8976 acydburn
// Show attachment box for adding attachments if true
1501 8976 acydburn
$allowed = ($auth->acl_get('f_attach', $forum_id) && $auth->acl_get('u_attach') && $config['allow_attachments'] && $form_enctype);
1502 8976 acydburn
1503 3697 acydburn
// Attachment entry
1504 8976 acydburn
posting_gen_attachment_entry($attachment_data, $filename_data, $allowed);
1505 3697 acydburn
1506 2923 psotfx
// Output page ...
1507 9961 Kellanved
page_header($page_title, false);
1508 2923 psotfx
1509 2923 psotfx
$template->set_filenames(array(
1510 3072 psotfx
        'body' => 'posting_body.html')
1511 2923 psotfx
);
1512 3572 acydburn
1513 6015 acydburn
make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));
1514 2923 psotfx
1515 3575 acydburn
// Topic review
1516 3575 acydburn
if ($mode == 'reply' || $mode == 'quote')
1517 3575 acydburn
{
1518 4551 acydburn
        if (topic_review($topic_id, $forum_id))
1519 4542 acydburn
        {
1520 4767 acydburn
                $template->assign_var('S_DISPLAY_REVIEW', true);
1521 4542 acydburn
        }
1522 3575 acydburn
}
1523 3575 acydburn
1524 3969 psotfx
page_footer();
1525 487 psotfx
1526 5114 acydburn
/**
1527 5902 acydburn
* Show upload popup (progress bar)
1528 5114 acydburn
*/
1529 5902 acydburn
function upload_popup($forum_style = 0)
1530 4479 acydburn
{
1531 5902 acydburn
        global $template, $user;
1532 4479 acydburn
1533 5902 acydburn
        ($forum_style) ? $user->setup('posting', $forum_style) : $user->setup('posting');
1534 4479 acydburn
1535 9961 Kellanved
        page_header($user->lang['PROGRESS_BAR'], false);
1536 5580 acydburn
1537 5902 acydburn
        $template->set_filenames(array(
1538 5902 acydburn
                'popup'        => 'posting_progress_bar.html')
1539 5902 acydburn
        );
1540 4479 acydburn
1541 5902 acydburn
        $template->assign_vars(array(
1542 6237 acydburn
                'PROGRESS_BAR'        => $user->img('upload_bar', $user->lang['UPLOAD_IN_PROGRESS']))
1543 5902 acydburn
        );
1544 4479 acydburn
1545 5902 acydburn
        $template->display('popup');
1546 8655 acydburn
1547 8655 acydburn
        garbage_collection();
1548 8655 acydburn
        exit_handler();
1549 4479 acydburn
}
1550 4479 acydburn
1551 5114 acydburn
/**
1552 5902 acydburn
* Do the various checks required for removing posts as well as removing it
1553 5114 acydburn
*/
1554 5902 acydburn
function handle_post_delete($forum_id, $topic_id, $post_id, &$post_data)
1555 4477 acydburn
{
1556 8924 toonarmy
        global $user, $db, $auth, $config;
1557 6015 acydburn
        global $phpbb_root_path, $phpEx;
1558 6015 acydburn
1559 5902 acydburn
        // If moderator removing post or user itself removing post, present a confirmation screen
1560 10080 nickvergessen
        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'] && !$post_data['post_edit_locked'] && ($post_data['post_time'] > time() - ($config['delete_time'] * 60) || !$config['delete_time'])))
1561 4477 acydburn
        {
1562 5902 acydburn
                $s_hidden_fields = build_hidden_fields(array(
1563 5902 acydburn
                        'p'                => $post_id,
1564 5902 acydburn
                        'f'                => $forum_id,
1565 5902 acydburn
                        'mode'        => 'delete')
1566 4477 acydburn
                );
1567 4477 acydburn
1568 5902 acydburn
                if (confirm_box(true))
1569 4477 acydburn
                {
1570 5902 acydburn
                        $data = array(
1571 5902 acydburn
                                'topic_first_post_id'        => $post_data['topic_first_post_id'],
1572 5902 acydburn
                                'topic_last_post_id'        => $post_data['topic_last_post_id'],
1573 8362 Kellanved
                                'topic_replies_real'        => $post_data['topic_replies_real'],
1574 5902 acydburn
                                'topic_approved'                => $post_data['topic_approved'],
1575 5902 acydburn
                                'topic_type'                        => $post_data['topic_type'],
1576 5902 acydburn
                                'post_approved'                        => $post_data['post_approved'],
1577 6063 naderman
                                'post_reported'                        => $post_data['post_reported'],
1578 5902 acydburn
                                'post_time'                                => $post_data['post_time'],
1579 6224 acydburn
                                'poster_id'                                => $post_data['poster_id'],
1580 6224 acydburn
                                'post_postcount'                => $post_data['post_postcount']
1581 4477 acydburn
                        );
1582 4477 acydburn
1583 5902 acydburn
                        $next_post_id = delete_post($forum_id, $topic_id, $post_id, $data);
1584 10170 acydburn
                        $post_username = ($post_data['poster_id'] == ANONYMOUS && !empty($post_data['post_username'])) ? $post_data['post_username'] : $post_data['username'];
1585 4477 acydburn
1586 8362 Kellanved
                        if ($next_post_id === false)
1587 4477 acydburn
                        {
1588 10170 acydburn
                                add_log('mod', $forum_id, $topic_id, 'LOG_DELETE_TOPIC', $post_data['topic_title'], $post_username);
1589 4970 psotfx
1590 6015 acydburn
                                $meta_info = append_sid("{$phpbb_root_path}viewforum.$phpEx", "f=$forum_id");
1591 5902 acydburn
                                $message = $user->lang['POST_DELETED'];
1592 5247 acydburn
                        }
1593 4477 acydburn
                        else
1594 4477 acydburn
                        {
1595 10170 acydburn
                                add_log('mod', $forum_id, $topic_id, 'LOG_DELETE_POST', $post_data['post_subject'], $post_username);
1596 4477 acydburn
1597 6015 acydburn
                                $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";
1598 5902 acydburn
                                $message = $user->lang['POST_DELETED'] . '<br /><br />' . sprintf($user->lang['RETURN_TOPIC'], '<a href="' . $meta_info . '">', '</a>');
1599 4477 acydburn
                        }
1600 4970 psotfx
1601 5902 acydburn
                        meta_refresh(3, $meta_info);
1602 6015 acydburn
                        $message .= '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id) . '">', '</a>');
1603 5902 acydburn
                        trigger_error($message);
1604 4477 acydburn
                }
1605 5902 acydburn
                else
1606 4477 acydburn
                {
1607 8350 acydburn
                        confirm_box(false, 'DELETE_POST', $s_hidden_fields);
1608 4477 acydburn
                }
1609 4477 acydburn
        }
1610 4477 acydburn
1611 5902 acydburn
        // If we are here the user is not able to delete - present the correct error message
1612 7322 acydburn
        if ($post_data['poster_id'] != $user->data['user_id'] && $auth->acl_get('f_delete', $forum_id))
1613 4504 acydburn
        {
1614 5902 acydburn
                trigger_error('DELETE_OWN_POSTS');
1615 4504 acydburn
        }
1616 4504 acydburn
1617 5902 acydburn
        if ($post_data['poster_id'] == $user->data['user_id'] && $auth->acl_get('f_delete', $forum_id) && $post_id != $post_data['topic_last_post_id'])
1618 4477 acydburn
        {
1619 5902 acydburn
                trigger_error('CANNOT_DELETE_REPLIED');
1620 4477 acydburn
        }
1621 4477 acydburn
1622 5902 acydburn
        trigger_error('USER_CANNOT_DELETE');
1623 4477 acydburn
}
1624 4477 acydburn
1625 3277 psotfx
?>