Verzeichnisstruktur phpBB-3.0.0


Veröffentlicht
12.12.2007

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

posting.php

Zuletzt modifiziert: 09.10.2024, 12:50 - Dateigröße: 53.36 KiB


0001  <?php
0002  /**
0003  *
0004  * @package phpBB3
0005  * @version $Id$
0006  * @copyright (c) 2005 phpBB Group
0007  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
0008  *
0009  */
0010   
0011  /**
0012  * @ignore
0013  */
0014  define('IN_PHPBB', true);
0015  $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
0016  $phpEx = substr(strrchr(__FILE__, '.'), 1);
0017  include($phpbb_root_path . 'common.' . $phpEx);
0018  include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
0019  include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
0020  include($phpbb_root_path . 'includes/message_parser.' . $phpEx);
0021   
0022   
0023  // Start session management
0024  $user->session_begin();
0025  $auth->acl($user->data);
0026   
0027   
0028  // Grab only parameters needed here
0029  $post_id    = request_var('p', 0);
0030  $topic_id    = request_var('t', 0);
0031  $forum_id    = request_var('f', 0);
0032  $draft_id    = request_var('d', 0);
0033  $lastclick    = request_var('lastclick', 0);
0034   
0035  $submit        = (isset($_POST['post'])) ? true : false;
0036  $preview    = (isset($_POST['preview'])) ? true : false;
0037  $save        = (isset($_POST['save'])) ? true : false;
0038  $load        = (isset($_POST['load'])) ? true : false;
0039  $delete        = (isset($_POST['delete'])) ? true : false;
0040  $cancel        = (isset($_POST['cancel']) && !isset($_POST['save'])) ? true : false;
0041   
0042  $refresh    = (isset($_POST['add_file']) || isset($_POST['delete_file']) || isset($_POST['cancel_unglobalise']) || $save || $load) ? true : false;
0043  $mode        = ($delete && !$preview && !$refresh && $submit) ? 'delete' : request_var('mode', '');
0044   
0045  $error = $post_data = array();
0046  $current_time = time();
0047   
0048   
0049  // Was cancel pressed? If so then redirect to the appropriate page
0050  if ($cancel || ($current_time - $lastclick < 2 && $submit))
0051  {
0052      $redirect = ($post_id) ? append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'p=' . $post_id) . '#p' . $post_id : (($topic_id) ? append_sid("{$phpbb_root_path}viewtopic.$phpEx", 't=' . $topic_id) : (($forum_id) ? append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id) : append_sid("{$phpbb_root_path}index.$phpEx")));
0053      redirect($redirect);
0054  }
0055   
0056  if (in_array($mode, array('post', 'reply', 'quote', 'edit', 'delete')) && !$forum_id)
0057  {
0058      trigger_error('NO_FORUM');
0059  }
0060   
0061  // We need to know some basic information in all cases before we do anything.
0062  switch ($mode)
0063  {
0064      case 'post':
0065          $sql = 'SELECT *
0066              FROM ' . FORUMS_TABLE . "
0067              WHERE forum_id = $forum_id";
0068      break;
0069   
0070      case 'bump':
0071      case 'reply':
0072          if (!$topic_id)
0073          {
0074              trigger_error('NO_TOPIC');
0075          }
0076   
0077          $sql = 'SELECT f.*, t.*
0078              FROM ' . TOPICS_TABLE . ' t, ' . FORUMS_TABLE . " f
0079              WHERE t.topic_id = $topic_id
0080                  AND (f.forum_id = t.forum_id
0081                      OR f.forum_id = $forum_id)";
0082      break;
0083   
0084      case 'quote':
0085      case 'edit':
0086      case 'delete':
0087          if (!$post_id)
0088          {
0089              $user->setup('posting');
0090              trigger_error('NO_POST');
0091          }
0092   
0093          $sql = 'SELECT f.*, t.*, p.*, u.username, u.username_clean, u.user_sig, u.user_sig_bbcode_uid, u.user_sig_bbcode_bitfield
0094              FROM ' . POSTS_TABLE . ' p, ' . TOPICS_TABLE . ' t, ' . FORUMS_TABLE . ' f, ' . USERS_TABLE . " u
0095              WHERE p.post_id = $post_id
0096                  AND t.topic_id = p.topic_id
0097                  AND u.user_id = p.poster_id
0098                  AND (f.forum_id = t.forum_id
0099                      OR f.forum_id = $forum_id)";
0100      break;
0101   
0102      case 'smilies':
0103          $sql = '';
0104          generate_smilies('window', $forum_id);
0105      break;
0106   
0107      case 'popup':
0108          if ($forum_id)
0109          {
0110              $sql = 'SELECT forum_style
0111                  FROM ' . FORUMS_TABLE . '
0112                  WHERE forum_id = ' . $forum_id;
0113          }
0114          else
0115          {
0116              upload_popup();
0117              garbage_collection();
0118              exit_handler();
0119          }
0120      break;
0121   
0122      default:
0123          $sql = '';
0124      break;
0125  }
0126   
0127  if (!$sql)
0128  {
0129      $user->setup('posting');
0130      trigger_error('NO_POST_MODE');
0131  }
0132   
0133  $result = $db->sql_query($sql);
0134  $post_data = $db->sql_fetchrow($result);
0135  $db->sql_freeresult($result);
0136   
0137  if (!$post_data)
0138  {
0139      if (!($mode == 'post' || $mode == 'bump' || $mode == 'reply'))
0140      {
0141          $user->setup('posting');
0142      }
0143      trigger_error(($mode == 'post' || $mode == 'bump' || $mode == 'reply') ? 'NO_TOPIC' : 'NO_POST');
0144  }
0145   
0146  if ($mode == 'popup')
0147  {
0148      upload_popup($post_data['forum_style']);
0149      exit_handler();
0150  }
0151   
0152  $user->setup(array('posting', 'mcp', 'viewtopic'), $post_data['forum_style']);
0153   
0154  // Use post_row values in favor of submitted ones...
0155  $forum_id    = (!empty($post_data['forum_id'])) ? (int) $post_data['forum_id'] : (int) $forum_id;
0156  $topic_id    = (!empty($post_data['topic_id'])) ? (int) $post_data['topic_id'] : (int) $topic_id;
0157  $post_id    = (!empty($post_data['post_id'])) ? (int) $post_data['post_id'] : (int) $post_id;
0158   
0159  // Need to login to passworded forum first?
0160  if ($post_data['forum_password'])
0161  {
0162      login_forum_box(array(
0163          'forum_id'            => $forum_id,
0164          'forum_password'    => $post_data['forum_password'])
0165      );
0166  }
0167   
0168  // Check permissions
0169  if ($user->data['is_bot'])
0170  {
0171      redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
0172  }
0173   
0174  // Is the user able to read within this forum?
0175  if (!$auth->acl_get('f_read', $forum_id))
0176  {
0177      if ($user->data['user_id'] != ANONYMOUS)
0178      {
0179          trigger_error('USER_CANNOT_READ');
0180      }
0181   
0182      login_box('', $user->lang['LOGIN_EXPLAIN_POST']);
0183  }
0184   
0185  // Permission to do the action asked?
0186  $is_authed = false;
0187   
0188  switch ($mode)
0189  {
0190      case 'post':
0191          if ($auth->acl_get('f_post', $forum_id))
0192          {
0193              $is_authed = true;
0194          }
0195      break;
0196   
0197      case 'bump':
0198          if ($auth->acl_get('f_bump', $forum_id))
0199          {
0200              $is_authed = true;
0201          }
0202      break;
0203   
0204      case 'quote':
0205   
0206          $post_data['post_edit_locked'] = 0;
0207   
0208      // no break;
0209   
0210      case 'reply':
0211          if ($auth->acl_get('f_reply', $forum_id))
0212          {
0213              $is_authed = true;
0214          }
0215      break;
0216   
0217      case 'edit':
0218          if ($user->data['is_registered'] && $auth->acl_gets('f_edit', 'm_edit', $forum_id))
0219          {
0220              $is_authed = true;
0221          }
0222      break;
0223   
0224      case 'delete':
0225          if ($user->data['is_registered'] && $auth->acl_gets('f_delete', 'm_delete', $forum_id))
0226          {
0227              $is_authed = true;
0228          }
0229      break;
0230  }
0231   
0232  if (!$is_authed)
0233  {
0234      $check_auth = ($mode == 'quote') ? 'reply' : $mode;
0235   
0236      if ($user->data['is_registered'])
0237      {
0238          trigger_error('USER_CANNOT_' . strtoupper($check_auth));
0239      }
0240   
0241      login_box('', $user->lang['LOGIN_EXPLAIN_' . strtoupper($mode)]);
0242  }
0243   
0244  // Is the user able to post within this forum?
0245  if ($post_data['forum_type'] != FORUM_POST && in_array($mode, array('post', 'bump', 'quote', 'reply')))
0246  {
0247      trigger_error('USER_CANNOT_FORUM_POST');
0248  }
0249   
0250  // Forum/Topic locked?
0251  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))
0252  {
0253      trigger_error(($post_data['forum_status'] == ITEM_LOCKED) ? 'FORUM_LOCKED' : 'TOPIC_LOCKED');
0254  }
0255   
0256  // Can we edit this post ... if we're a moderator with rights then always yes
0257  // else it depends on editing times, lock status and if we're the correct user
0258  if ($mode == 'edit' && !$auth->acl_get('m_edit', $forum_id))
0259  {
0260      if ($user->data['user_id'] != $post_data['poster_id'])
0261      {
0262          trigger_error('USER_CANNOT_EDIT');
0263      }
0264   
0265      if (!($post_data['post_time'] > time() - ($config['edit_time'] * 60) || !$config['edit_time']))
0266      {
0267          trigger_error('CANNOT_EDIT_TIME');
0268      }
0269   
0270      if ($post_data['post_edit_locked'])
0271      {
0272          trigger_error('CANNOT_EDIT_POST_LOCKED');
0273      }
0274  }
0275   
0276  // Handle delete mode...
0277  if ($mode == 'delete')
0278  {
0279      handle_post_delete($forum_id, $topic_id, $post_id, $post_data);
0280      exit_handler();
0281  }
0282   
0283  // Handle bump mode...
0284  if ($mode == 'bump')
0285  {
0286      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']))
0287      {
0288          $db->sql_transaction('begin');
0289   
0290          $sql = 'UPDATE ' . POSTS_TABLE . "
0291              SET post_time = $current_time
0292              WHERE post_id = {$post_data['topic_last_post_id']}
0293                  AND topic_id = $topic_id";
0294          $db->sql_query($sql);
0295   
0296          $sql = 'UPDATE ' . TOPICS_TABLE . "
0297              SET topic_last_post_time = $current_time,
0298                  topic_bumped = 1,
0299                  topic_bumper = " . $user->data['user_id'] . "
0300              WHERE topic_id = $topic_id";
0301          $db->sql_query($sql);
0302   
0303          update_post_information('forum', $forum_id);
0304   
0305          $sql = 'UPDATE ' . USERS_TABLE . "
0306              SET user_lastpost_time = $current_time
0307              WHERE user_id = " . $user->data['user_id'];
0308          $db->sql_query($sql);
0309   
0310          $db->sql_transaction('commit');
0311   
0312          markread('post', $forum_id, $topic_id, $current_time);
0313   
0314          add_log('mod', $forum_id, $topic_id, 'LOG_BUMP_TOPIC', $post_data['topic_title']);
0315   
0316          $meta_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&amp;t=$topic_id&amp;p={$post_data['topic_last_post_id']}") . "#p{$post_data['topic_last_post_id']}";
0317          meta_refresh(3, $meta_url);
0318   
0319          $message = $user->lang['TOPIC_BUMPED'] . '<br /><br />' . sprintf($user->lang['VIEW_MESSAGE'], '<a href="' . $meta_url . '">', '</a>');
0320          $message .= '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id) . '">', '</a>');
0321   
0322          trigger_error($message);
0323      }
0324   
0325      trigger_error('BUMP_ERROR');
0326  }
0327   
0328  // Subject length limiting to 60 characters if first post...
0329  if ($mode == 'post' || ($mode == 'edit' && $post_data['topic_first_post_id'] == $post_data['post_id']))
0330  {
0331      $template->assign_var('S_NEW_MESSAGE', true);
0332  }
0333   
0334  // Determine some vars
0335  if (isset($post_data['poster_id']) && $post_data['poster_id'] == ANONYMOUS)
0336  {
0337      $post_data['quote_username'] = (!empty($post_data['post_username'])) ? $post_data['post_username'] : $user->lang['GUEST'];
0338  }
0339  else
0340  {
0341      $post_data['quote_username'] = isset($post_data['username']) ? $post_data['username'] : '';
0342  }
0343   
0344  $post_data['post_edit_locked']    = (isset($post_data['post_edit_locked'])) ? (int) $post_data['post_edit_locked'] : 0;
0345  $post_data['post_subject']        = (in_array($mode, array('quote', 'edit'))) ? $post_data['post_subject'] : ((isset($post_data['topic_title'])) ? $post_data['topic_title'] : '');
0346  $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;
0347  $post_data['poll_length']        = (!empty($post_data['poll_length'])) ? (int) $post_data['poll_length'] / 86400 : 0;
0348  $post_data['poll_start']        = (!empty($post_data['poll_start'])) ? (int) $post_data['poll_start'] : 0;
0349  $post_data['icon_id']            = (!isset($post_data['icon_id']) || in_array($mode, array('quote', 'reply'))) ? 0 : (int) $post_data['icon_id'];
0350  $post_data['poll_options']        = array();
0351   
0352  // Get Poll Data
0353  if ($post_data['poll_start'])
0354  {
0355      $sql = 'SELECT poll_option_text
0356          FROM ' . POLL_OPTIONS_TABLE . "
0357          WHERE topic_id = $topic_id
0358          ORDER BY poll_option_id";
0359      $result = $db->sql_query($sql);
0360   
0361      while ($row = $db->sql_fetchrow($result))
0362      {
0363          $post_data['poll_options'][] = trim($row['poll_option_text']);
0364      }
0365      $db->sql_freeresult($result);
0366  }
0367   
0368  $orig_poll_options_size = sizeof($post_data['poll_options']);
0369   
0370  $message_parser = new parse_message();
0371   
0372  if (isset($post_data['post_text']))
0373  {
0374      $message_parser->message = &$post_data['post_text'];
0375      unset($post_data['post_text']);
0376  }
0377   
0378  // Set some default variables
0379  $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);
0380   
0381  foreach ($uninit as $var_name => $default_value)
0382  {
0383      if (!isset($post_data[$var_name]))
0384      {
0385          $post_data[$var_name] = $default_value;
0386      }
0387  }
0388  unset($uninit);
0389   
0390  // Always check if the submitted attachment data is valid and belongs to the user.
0391  // Further down (especially in submit_post()) we do not check this again.
0392  $message_parser->get_submitted_attachment_data($post_data['poster_id']);
0393   
0394  if ($post_data['post_attachment'] && !$submit && !$refresh && !$preview && $mode == 'edit')
0395  {
0396      // Do not change to SELECT *
0397      $sql = 'SELECT attach_id, is_orphan, attach_comment, real_filename
0398          FROM ' . ATTACHMENTS_TABLE . "
0399          WHERE post_msg_id = $post_id
0400              AND in_message = 0
0401              AND is_orphan = 0
0402          ORDER BY filetime DESC";
0403      $result = $db->sql_query($sql);
0404      $message_parser->attachment_data = array_merge($message_parser->attachment_data, $db->sql_fetchrowset($result));
0405      $db->sql_freeresult($result);
0406  }
0407   
0408  if ($post_data['poster_id'] == ANONYMOUS)
0409  {
0410      $post_data['username'] = ($mode == 'quote' || $mode == 'edit') ? trim($post_data['post_username']) : '';
0411  }
0412  else
0413  {
0414      $post_data['username'] = ($mode == 'quote' || $mode == 'edit') ? trim($post_data['username']) : '';
0415  }
0416   
0417  $post_data['enable_urls'] = $post_data['enable_magic_url'];
0418   
0419  if ($mode != 'edit')
0420  {
0421      $post_data['enable_sig']        = ($config['allow_sig'] && $user->optionget('attachsig')) ? true: false;
0422      $post_data['enable_smilies']    = ($config['allow_smilies'] && $user->optionget('smilies')) ? true : false;
0423      $post_data['enable_bbcode']        = ($config['allow_bbcode'] && $user->optionget('bbcode')) ? true : false;
0424      $post_data['enable_urls']        = true;
0425  }
0426   
0427  $post_data['enable_magic_url'] = $post_data['drafts'] = false;
0428   
0429  // User own some drafts?
0430  if ($user->data['is_registered'] && $auth->acl_get('u_savedrafts') && ($mode == 'reply' || $mode == 'post' || $mode == 'quote'))
0431  {
0432      $sql = 'SELECT draft_id
0433          FROM ' . DRAFTS_TABLE . '
0434          WHERE user_id = ' . $user->data['user_id'] .
0435              (($forum_id) ? ' AND forum_id = ' . (int) $forum_id : '') .
0436              (($topic_id) ? ' AND topic_id = ' . (int) $topic_id : '') .
0437              (($draft_id) ? " AND draft_id <> $draft_id" : '');
0438      $result = $db->sql_query_limit($sql, 1);
0439   
0440      if ($db->sql_fetchrow($result))
0441      {
0442          $post_data['drafts'] = true;
0443      }
0444      $db->sql_freeresult($result);
0445  }
0446   
0447  $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);
0448   
0449  // Check if user is watching this topic
0450  if ($mode != 'post' && $config['allow_topic_notify'] && $user->data['is_registered'])
0451  {
0452      $sql = 'SELECT topic_id
0453          FROM ' . TOPICS_WATCH_TABLE . '
0454          WHERE topic_id = ' . $topic_id . '
0455              AND user_id = ' . $user->data['user_id'];
0456      $result = $db->sql_query($sql);
0457      $post_data['notify_set'] = (int) $db->sql_fetchfield('topic_id');
0458      $db->sql_freeresult($result);
0459  }
0460   
0461  // Do we want to edit our post ?
0462  if ($mode == 'edit' && $post_data['bbcode_uid'])
0463  {
0464      $message_parser->bbcode_uid = $post_data['bbcode_uid'];
0465  }
0466   
0467  // HTML, BBCode, Smilies, Images and Flash status
0468  $bbcode_status    = ($config['allow_bbcode'] && $auth->acl_get('f_bbcode', $forum_id)) ? true : false;
0469  $smilies_status    = ($bbcode_status && $config['allow_smilies'] && $auth->acl_get('f_smilies', $forum_id)) ? true : false;
0470  $img_status        = ($bbcode_status && $auth->acl_get('f_img', $forum_id)) ? true : false;
0471  $url_status        = ($config['allow_post_links']) ? true : false;
0472  $flash_status    = ($bbcode_status && $auth->acl_get('f_flash', $forum_id) && $config['allow_post_flash']) ? true : false;
0473  $quote_status    = ($auth->acl_get('f_reply', $forum_id)) ? true : false;
0474   
0475  // Save Draft
0476  if ($save && $user->data['is_registered'] && $auth->acl_get('u_savedrafts') && ($mode == 'reply' || $mode == 'post' || $mode == 'quote'))
0477  {
0478      $subject = utf8_normalize_nfc(request_var('subject', '', true));
0479      $subject = (!$subject && $mode != 'post') ? $post_data['topic_title'] : $subject;
0480      $message = utf8_normalize_nfc(request_var('message', '', true));
0481      
0482      if ($subject && $message)
0483      {
0484          if (confirm_box(true))
0485          {
0486              $sql = 'INSERT INTO ' . DRAFTS_TABLE . ' ' . $db->sql_build_array('INSERT', array(
0487                  'user_id'        => (int) $user->data['user_id'],
0488                  'topic_id'        => (int) $topic_id,
0489                  'forum_id'        => (int) $forum_id,
0490                  'save_time'        => (int) $current_time,
0491                  'draft_subject'    => (string) $subject,
0492                  'draft_message'    => (string) $message)
0493              );
0494              $db->sql_query($sql);
0495   
0496              $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");
0497   
0498              meta_refresh(3, $meta_info);
0499   
0500              $message = $user->lang['DRAFT_SAVED'] . '<br /><br />';
0501              $message .= ($mode != 'post') ? sprintf($user->lang['RETURN_TOPIC'], '<a href="' . $meta_info . '">', '</a>') . '<br /><br />' : '';
0502              $message .= sprintf($user->lang['RETURN_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id) . '">', '</a>');
0503   
0504              trigger_error($message);
0505          }
0506          else
0507          {
0508              $s_hidden_fields = build_hidden_fields(array(
0509                  'mode'        => $mode,
0510                  'save'        => true,
0511                  'f'            => $forum_id,
0512                  't'            => $topic_id,
0513                  'subject'    => $subject,
0514                  'message'    => $message,
0515                  )
0516              );
0517   
0518              confirm_box(false, 'SAVE_DRAFT', $s_hidden_fields);
0519          }
0520      }
0521      else
0522      {
0523          if (!$subject || !utf8_clean_string($subject))
0524          {
0525              $error[] = $user->lang['EMPTY_SUBJECT'];
0526          }
0527   
0528          if (!$message)
0529          {
0530              $error[] = $user->lang['TOO_FEW_CHARS'];
0531          }
0532      }
0533      unset($subject, $message);
0534  }
0535   
0536  // Load requested Draft
0537  if ($draft_id && ($mode == 'reply' || $mode == 'quote' || $mode == 'post') && $user->data['is_registered'] && $auth->acl_get('u_savedrafts'))
0538  {
0539      $sql = 'SELECT draft_subject, draft_message
0540          FROM ' . DRAFTS_TABLE . "
0541          WHERE draft_id = $draft_id
0542              AND user_id = " . $user->data['user_id'];
0543      $result = $db->sql_query_limit($sql, 1);
0544      $row = $db->sql_fetchrow($result);
0545      $db->sql_freeresult($result);
0546   
0547      if ($row)
0548      {
0549          $post_data['post_subject'] = $row['draft_subject'];
0550          $message_parser->message = $row['draft_message'];
0551   
0552          $template->assign_var('S_DRAFT_LOADED', true);
0553      }
0554      else
0555      {
0556          $draft_id = 0;
0557      }
0558  }
0559   
0560  // Load draft overview
0561  if ($load && ($mode == 'reply' || $mode == 'quote' || $mode == 'post') && $post_data['drafts'])
0562  {
0563      load_drafts($topic_id, $forum_id);
0564  }
0565   
0566  $solved_captcha = false;
0567   
0568  if ($submit || $preview || $refresh)
0569  {
0570      $post_data['topic_cur_post_id']    = request_var('topic_cur_post_id', 0);
0571      $post_data['post_subject']        = utf8_normalize_nfc(request_var('subject', '', true));
0572      $message_parser->message        = utf8_normalize_nfc(request_var('message', '', true));
0573   
0574      $post_data['username']            = utf8_normalize_nfc(request_var('username', $post_data['username'], true));
0575      $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)) : '';
0576   
0577      $post_data['orig_topic_type']    = $post_data['topic_type'];
0578      $post_data['topic_type']        = request_var('topic_type', (($mode != 'post') ? (int) $post_data['topic_type'] : POST_NORMAL));
0579      $post_data['topic_time_limit']    = request_var('topic_time_limit', (($mode != 'post') ? (int) $post_data['topic_time_limit'] : 0));
0580      $post_data['icon_id']            = request_var('icon', 0);
0581   
0582      $post_data['enable_bbcode']        = (!$bbcode_status || isset($_POST['disable_bbcode'])) ? false : true;
0583      $post_data['enable_smilies']    = (!$smilies_status || isset($_POST['disable_smilies'])) ? false : true;
0584      $post_data['enable_urls']        = (isset($_POST['disable_magic_url'])) ? 0 : 1;
0585      $post_data['enable_sig']        = (!$config['allow_sig']) ? false : ((isset($_POST['attach_sig']) && $user->data['is_registered']) ? true : false);
0586   
0587      if ($config['allow_topic_notify'] && $user->data['is_registered'])
0588      {
0589          $notify = (isset($_POST['notify'])) ? true : false;
0590      }
0591      else
0592      {
0593          $notify = false;
0594      }
0595   
0596      $topic_lock            = (isset($_POST['lock_topic'])) ? true : false;
0597      $post_lock            = (isset($_POST['lock_post'])) ? true : false;
0598      $poll_delete        = (isset($_POST['poll_delete'])) ? true : false;
0599   
0600      if ($submit)
0601      {
0602          $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);
0603          $status_switch = ($status_switch != $check_value);
0604      }
0605      else
0606      {
0607          $status_switch = 1;
0608      }
0609   
0610      // Delete Poll
0611      if ($poll_delete && $mode == 'edit' && sizeof($post_data['poll_options']) &&
0612          ((!$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)))
0613      {
0614          if ($submit && check_form_key('posting'))
0615          {
0616              $sql = 'DELETE FROM ' . POLL_OPTIONS_TABLE . "
0617                  WHERE topic_id = $topic_id";
0618              $db->sql_query($sql);
0619   
0620              $sql = 'DELETE FROM ' . POLL_VOTES_TABLE . "
0621                  WHERE topic_id = $topic_id";
0622              $db->sql_query($sql);
0623              
0624              $topic_sql = array(
0625                  'poll_title'        => '',
0626                  'poll_start'         => 0,
0627                  'poll_length'        => 0,
0628                  'poll_last_vote'    => 0,
0629                  'poll_max_options'    => 0,
0630                  'poll_vote_change'    => 0
0631              );
0632   
0633              $sql = 'UPDATE ' . TOPICS_TABLE . '
0634                  SET ' . $db->sql_build_array('UPDATE', $topic_sql) . "
0635                  WHERE topic_id = $topic_id";
0636              $db->sql_query($sql);
0637          }
0638   
0639          $post_data['poll_title'] = $post_data['poll_option_text'] = '';
0640          $post_data['poll_vote_change'] = $post_data['poll_max_options'] = $post_data['poll_length'] = 0;
0641      }
0642      else
0643      {
0644          $post_data['poll_title']        = utf8_normalize_nfc(request_var('poll_title', '', true));
0645          $post_data['poll_length']        = request_var('poll_length', 0);
0646          $post_data['poll_option_text']    = utf8_normalize_nfc(request_var('poll_option_text', '', true));
0647          $post_data['poll_max_options']    = request_var('poll_max_options', 1);
0648          $post_data['poll_vote_change']    = ($auth->acl_get('f_votechg', $forum_id) && isset($_POST['poll_vote_change'])) ? 1 : 0;
0649      }
0650   
0651      // If replying/quoting and last post id has changed
0652      // give user option to continue submit or return to post
0653      // notify and show user the post made between his request and the final submit
0654      if (($mode == 'reply' || $mode == 'quote') && $post_data['topic_cur_post_id'] && $post_data['topic_cur_post_id'] != $post_data['topic_last_post_id'])
0655      {
0656          // Only do so if it is allowed forum-wide
0657          if ($post_data['forum_flags'] & FORUM_FLAG_POST_REVIEW)
0658          {
0659              if (topic_review($topic_id, $forum_id, 'post_review', $post_data['topic_cur_post_id']))
0660              {
0661                  $template->assign_var('S_POST_REVIEW', true);
0662              }
0663   
0664              $submit = false;
0665              $refresh = true;
0666          }
0667      }
0668   
0669      // Parse Attachments - before checksum is calculated
0670      $message_parser->parse_attachments('fileupload', $mode, $forum_id, $submit, $preview, $refresh);
0671   
0672      // Grab md5 'checksum' of new message
0673      $message_md5 = md5($message_parser->message);
0674   
0675      // Check checksum ... don't re-parse message if the same
0676      $update_message = ($mode != 'edit' || $message_md5 != $post_data['post_checksum'] || $status_switch || strlen($post_data['bbcode_uid']) < BBCODE_UID_LEN) ? true : false;
0677      
0678      // Parse message
0679      if ($update_message)
0680      {
0681          if (sizeof($message_parser->warn_msg))
0682          {
0683              $error[] = implode('<br />', $message_parser->warn_msg);
0684              $message_parser->warn_msg = array();
0685          }
0686   
0687          $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']);
0688   
0689          // On a refresh we do not care about message parsing errors
0690          if (sizeof($message_parser->warn_msg) && $refresh)
0691          {
0692              $message_parser->warn_msg = array();
0693          }
0694      }
0695      else
0696      {
0697          $message_parser->bbcode_bitfield = $post_data['bbcode_bitfield'];
0698      }
0699   
0700      if ($mode != 'edit' && !$preview && !$refresh && $config['flood_interval'] && !$auth->acl_get('f_ignoreflood', $forum_id))
0701      {
0702          // Flood check
0703          $last_post_time = 0;
0704   
0705          if ($user->data['is_registered'])
0706          {
0707              $last_post_time = $user->data['user_lastpost_time'];
0708          }
0709          else
0710          {
0711              $sql = 'SELECT post_time AS last_post_time
0712                  FROM ' . POSTS_TABLE . "
0713                  WHERE poster_ip = '" . $user->ip . "'
0714                      AND post_time > " . ($current_time - $config['flood_interval']);
0715              $result = $db->sql_query_limit($sql, 1);
0716              if ($row = $db->sql_fetchrow($result))
0717              {
0718                  $last_post_time = $row['last_post_time'];
0719              }
0720              $db->sql_freeresult($result);
0721          }
0722   
0723          if ($last_post_time && ($current_time - $last_post_time) < intval($config['flood_interval']))
0724          {
0725              $error[] = $user->lang['FLOOD_ERROR'];
0726          }
0727      }
0728   
0729      // Validate username
0730      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']))
0731      {
0732          include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
0733   
0734          if (($result = validate_username($post_data['username'], (!empty($post_data['post_username'])) ? $post_data['post_username'] : '')) !== false)
0735          {
0736              $user->add_lang('ucp');
0737              $error[] = $user->lang[$result . '_USERNAME'];
0738          }
0739      }
0740   
0741      if ($config['enable_post_confirm'] && !$user->data['is_registered'] && in_array($mode, array('quote', 'post', 'reply')))
0742      {
0743          $confirm_id = request_var('confirm_id', '');
0744          $confirm_code = request_var('confirm_code', '');
0745   
0746          $sql = 'SELECT code
0747              FROM ' . CONFIRM_TABLE . "
0748              WHERE confirm_id = '" . $db->sql_escape($confirm_id) . "'
0749                  AND session_id = '" . $db->sql_escape($user->session_id) . "'
0750                  AND confirm_type = " . CONFIRM_POST;
0751          $result = $db->sql_query($sql);
0752          $confirm_row = $db->sql_fetchrow($result);
0753          $db->sql_freeresult($result);
0754   
0755          if (empty($confirm_row['code']) || strcasecmp($confirm_row['code'], $confirm_code) !== 0)
0756          {
0757              $error[] = $user->lang['CONFIRM_CODE_WRONG'];
0758          }
0759          else
0760          {
0761              $solved_captcha = true;
0762          }
0763      }
0764   
0765      // check form
0766      if (($submit || $preview) && !check_form_key('posting'))
0767      {
0768          $error[] = $user->lang['FORM_INVALID'];
0769      }
0770   
0771      // Parse subject
0772      if (!$preview && !$refresh && !utf8_clean_string($post_data['post_subject']) && ($mode == 'post' || ($mode == 'edit' && $post_data['topic_first_post_id'] == $post_id)))
0773      {
0774          $error[] = $user->lang['EMPTY_SUBJECT'];
0775      }
0776   
0777      $post_data['poll_last_vote'] = (isset($post_data['poll_last_vote'])) ? $post_data['poll_last_vote'] : 0;
0778   
0779      if ($post_data['poll_option_text'] &&
0780          ($mode == 'post' || ($mode == 'edit' && $post_id == $post_data['topic_first_post_id']/* && (!$post_data['poll_last_vote'] || $auth->acl_get('m_edit', $forum_id))*/))
0781          && $auth->acl_get('f_poll', $forum_id))
0782      {
0783          $poll = array(
0784              'poll_title'        => $post_data['poll_title'],
0785              'poll_length'        => $post_data['poll_length'],
0786              'poll_max_options'    => $post_data['poll_max_options'],
0787              'poll_option_text'    => $post_data['poll_option_text'],
0788              'poll_start'        => $post_data['poll_start'],
0789              'poll_last_vote'    => $post_data['poll_last_vote'],
0790              'poll_vote_change'    => $post_data['poll_vote_change'],
0791              'enable_bbcode'        => $post_data['enable_bbcode'],
0792              'enable_urls'        => $post_data['enable_urls'],
0793              'enable_smilies'    => $post_data['enable_smilies'],
0794              'img_status'        => $img_status
0795          );
0796   
0797          $message_parser->parse_poll($poll);
0798   
0799          $post_data['poll_options'] = (isset($poll['poll_options'])) ? $poll['poll_options'] : '';
0800          $post_data['poll_title'] = (isset($poll['poll_title'])) ? $poll['poll_title'] : '';
0801   
0802          /* We reset votes, therefore also allow removing options
0803          if ($post_data['poll_last_vote'] && ($poll['poll_options_size'] < $orig_poll_options_size))
0804          {
0805              $message_parser->warn_msg[] = $user->lang['NO_DELETE_POLL_OPTIONS'];
0806          }*/
0807      }
0808      else
0809      {
0810          $poll = array();
0811      }
0812   
0813      // Check topic type
0814      if ($post_data['topic_type'] != POST_NORMAL && ($mode == 'post' || ($mode == 'edit' && $post_data['topic_first_post_id'] == $post_id)))
0815      {
0816          switch ($post_data['topic_type'])
0817          {
0818              case POST_GLOBAL:
0819              case POST_ANNOUNCE:
0820                  $auth_option = 'f_announce';
0821              break;
0822   
0823              case POST_STICKY:
0824                  $auth_option = 'f_sticky';
0825              break;
0826   
0827              default:
0828                  $auth_option = '';
0829              break;
0830          }
0831   
0832          if (!$auth->acl_get($auth_option, $forum_id))
0833          {
0834              // There is a special case where a user edits his post whereby the topic type got changed by an admin/mod.
0835              // Another case would be a mod not having sticky permissions for example but edit permissions.
0836              if ($mode == 'edit')
0837              {
0838                  // To prevent non-authed users messing around with the topic type we reset it to the original one.
0839                  $post_data['topic_type'] = $post_data['orig_topic_type'];
0840              }
0841              else
0842              {
0843                  $error[] = $user->lang['CANNOT_POST_' . str_replace('F_', '', strtoupper($auth_option))];
0844              }
0845          }
0846      }
0847   
0848      if (sizeof($message_parser->warn_msg))
0849      {
0850          $error[] = implode('<br />', $message_parser->warn_msg);
0851      }
0852   
0853      // DNSBL check
0854      if ($config['check_dnsbl'] && !$refresh)
0855      {
0856          if (($dnsbl = $user->check_dnsbl('post')) !== false)
0857          {
0858              $error[] = sprintf($user->lang['IP_BLACKLISTED'], $user->ip, $dnsbl[1]);
0859          }
0860      }
0861   
0862      // Store message, sync counters
0863      if (!sizeof($error) && $submit)
0864      {
0865          // Check if we want to de-globalize the topic... and ask for new forum
0866          if ($post_data['topic_type'] != POST_GLOBAL)
0867          {
0868              $sql = 'SELECT topic_type, forum_id
0869                  FROM ' . TOPICS_TABLE . "
0870                  WHERE topic_id = $topic_id";
0871              $result = $db->sql_query($sql);
0872              $row = $db->sql_fetchrow($result);
0873              $db->sql_freeresult($result);
0874   
0875              if ($row && !$row['forum_id'] && $row['topic_type'] == POST_GLOBAL)
0876              {
0877                  $to_forum_id = request_var('to_forum_id', 0);
0878   
0879                  if ($to_forum_id)
0880                  {
0881                      $sql = 'SELECT forum_type
0882                          FROM ' . FORUMS_TABLE . '
0883                          WHERE forum_id = ' . $to_forum_id;
0884                      $result = $db->sql_query($sql);
0885                      $forum_type = (int) $db->sql_fetchfield('forum_type');
0886                      $db->sql_freeresult($result);
0887   
0888                      if ($forum_type != FORUM_POST || !$auth->acl_get('f_post', $to_forum_id))
0889                      {
0890                          $to_forum_id = 0;
0891                      }
0892                  }
0893   
0894                  if (!$to_forum_id)
0895                  {
0896                      include_once($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
0897   
0898                      $template->assign_vars(array(
0899                          'S_FORUM_SELECT'    => make_forum_select(false, false, false, true, true, true),
0900                          'S_UNGLOBALISE'        => true)
0901                      );
0902   
0903                      $submit = false;
0904                      $refresh = true;
0905                  }
0906                  else
0907                  {
0908                      if (!$auth->acl_get('f_post', $to_forum_id))
0909                      {
0910                          // This will only be triggered if the user tried to trick the forum.
0911                          trigger_error('NOT_AUTHORISED');
0912                      }
0913   
0914                      $forum_id = $to_forum_id;
0915                  }
0916              }
0917          }
0918   
0919          if ($submit)
0920          {
0921              // Lock/Unlock Topic
0922              $change_topic_status = $post_data['topic_status'];
0923              $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;
0924   
0925              if ($post_data['topic_status'] == ITEM_LOCKED && !$topic_lock && $perm_lock_unlock)
0926              {
0927                  $change_topic_status = ITEM_UNLOCKED;
0928              }
0929              else if ($post_data['topic_status'] == ITEM_UNLOCKED && $topic_lock && $perm_lock_unlock)
0930              {
0931                  $change_topic_status = ITEM_LOCKED;
0932              }
0933   
0934              if ($change_topic_status != $post_data['topic_status'])
0935              {
0936                  $sql = 'UPDATE ' . TOPICS_TABLE . "
0937                      SET topic_status = $change_topic_status
0938                      WHERE topic_id = $topic_id
0939                          AND topic_moved_id = 0";
0940                  $db->sql_query($sql);
0941   
0942                  $user_lock = ($auth->acl_get('f_user_lock', $forum_id) && $user->data['is_registered'] && $user->data['user_id'] == $post_data['topic_poster']) ? 'USER_' : '';
0943   
0944                  add_log('mod', $forum_id, $topic_id, 'LOG_' . $user_lock . (($change_topic_status == ITEM_LOCKED) ? 'LOCK' : 'UNLOCK'), $post_data['topic_title']);
0945              }
0946   
0947              // Lock/Unlock Post Edit
0948              if ($mode == 'edit' && $post_data['post_edit_locked'] == ITEM_LOCKED && !$post_lock && $auth->acl_get('m_edit', $forum_id))
0949              {
0950                  $post_data['post_edit_locked'] = ITEM_UNLOCKED;
0951              }
0952              else if ($mode == 'edit' && $post_data['post_edit_locked'] == ITEM_UNLOCKED && $post_lock && $auth->acl_get('m_edit', $forum_id))
0953              {
0954                  $post_data['post_edit_locked'] = ITEM_LOCKED;
0955              }
0956   
0957              $data = array(
0958                  'topic_title'            => (empty($post_data['topic_title'])) ? $post_data['post_subject'] : $post_data['topic_title'],
0959                  'topic_first_post_id'    => (isset($post_data['topic_first_post_id'])) ? (int) $post_data['topic_first_post_id'] : 0,
0960                  'topic_last_post_id'    => (isset($post_data['topic_last_post_id'])) ? (int) $post_data['topic_last_post_id'] : 0,
0961                  'topic_time_limit'        => (int) $post_data['topic_time_limit'],
0962                  'topic_attachment'        => (isset($post_data['topic_attachment'])) ? (int) $post_data['topic_attachment'] : 0,
0963                  'post_id'                => (int) $post_id,
0964                  'topic_id'                => (int) $topic_id,
0965                  'forum_id'                => (int) $forum_id,
0966                  'icon_id'                => (int) $post_data['icon_id'],
0967                  'poster_id'                => (int) $post_data['poster_id'],
0968                  'enable_sig'            => (bool) $post_data['enable_sig'],
0969                  'enable_bbcode'            => (bool) $post_data['enable_bbcode'],
0970                  'enable_smilies'        => (bool) $post_data['enable_smilies'],
0971                  'enable_urls'            => (bool) $post_data['enable_urls'],
0972                  'enable_indexing'        => (bool) $post_data['enable_indexing'],
0973                  'message_md5'            => (string) $message_md5,
0974                  'post_time'                => (isset($post_data['post_time'])) ? (int) $post_data['post_time'] : $current_time,
0975                  'post_checksum'            => (isset($post_data['post_checksum'])) ? (string) $post_data['post_checksum'] : '',
0976                  'post_edit_reason'        => $post_data['post_edit_reason'],
0977                  'post_edit_user'        => ($mode == 'edit') ? $user->data['user_id'] : ((isset($post_data['post_edit_user'])) ? (int) $post_data['post_edit_user'] : 0),
0978                  'forum_parents'            => $post_data['forum_parents'],
0979                  'forum_name'            => $post_data['forum_name'],
0980                  'notify'                => $notify,
0981                  'notify_set'            => $post_data['notify_set'],
0982                  'poster_ip'                => (isset($post_data['poster_ip'])) ? $post_data['poster_ip'] : $user->ip,
0983                  'post_edit_locked'        => (int) $post_data['post_edit_locked'],
0984                  'bbcode_bitfield'        => $message_parser->bbcode_bitfield,
0985                  'bbcode_uid'            => $message_parser->bbcode_uid,
0986                  'message'                => $message_parser->message,
0987                  'attachment_data'        => $message_parser->attachment_data,
0988                  'filename_data'            => $message_parser->filename_data,
0989   
0990                  'topic_approved'        => (isset($post_data['topic_approved'])) ? $post_data['topic_approved'] : false,
0991                  'post_approved'            => (isset($post_data['post_approved'])) ? $post_data['post_approved'] : false,
0992              );
0993   
0994              if ($mode == 'edit')
0995              {
0996                  $data['topic_replies_real'] = $post_data['topic_replies_real'];
0997                  $data['topic_replies'] = $post_data['topic_replies'];
0998              }
0999   
1000              unset($message_parser);
1001   
1002              $redirect_url = submit_post($mode, $post_data['post_subject'], $post_data['username'], $post_data['topic_type'], $poll, $data, $update_message);
1003              $post_need_approval = (!$auth->acl_get('f_noapprove', $data['forum_id']) && !$auth->acl_get('m_approve', $data['forum_id'])) ? true : false;
1004   
1005              // If the post need approval we will wait a lot longer.
1006              if ($post_need_approval)
1007              {
1008                  meta_refresh(10, $redirect_url);
1009                  $message = ($mode == 'edit') ? $user->lang['POST_EDITED_MOD'] : $user->lang['POST_STORED_MOD'];
1010                  $message .= (($user->data['user_id'] == ANONYMOUS) ? '' : ' '. $user->lang['POST_APPROVAL_NOTIFY']);
1011              }
1012              else
1013              {
1014                  meta_refresh(3, $redirect_url);
1015   
1016                  $message = ($mode == 'edit') ? 'POST_EDITED' : 'POST_STORED';
1017                  $message = $user->lang[$message] . '<br /><br />' . sprintf($user->lang['VIEW_MESSAGE'], '<a href="' . $redirect_url . '">', '</a>');
1018              }
1019   
1020              $message .= '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $data['forum_id']) . '">', '</a>');
1021              trigger_error($message);
1022          }
1023      }
1024  }
1025   
1026  // Preview
1027  if (!sizeof($error) && $preview)
1028  {
1029      $post_data['post_time'] = ($mode == 'edit') ? $post_data['post_time'] : $current_time;
1030   
1031      $preview_message = $message_parser->format_display($post_data['enable_bbcode'], $post_data['enable_urls'], $post_data['enable_smilies'], false);
1032   
1033      $preview_signature = ($mode == 'edit') ? $post_data['user_sig'] : $user->data['user_sig'];
1034      $preview_signature_uid = ($mode == 'edit') ? $post_data['user_sig_bbcode_uid'] : $user->data['user_sig_bbcode_uid'];
1035      $preview_signature_bitfield = ($mode == 'edit') ? $post_data['user_sig_bbcode_bitfield'] : $user->data['user_sig_bbcode_bitfield'];
1036   
1037      // Signature
1038      if ($post_data['enable_sig'] && $config['allow_sig'] && $preview_signature && $auth->acl_get('f_sigs', $forum_id))
1039      {
1040          $parse_sig = new parse_message($preview_signature);
1041          $parse_sig->bbcode_uid = $preview_signature_uid;
1042          $parse_sig->bbcode_bitfield = $preview_signature_bitfield;
1043   
1044          // Not sure about parameters for bbcode/smilies/urls... in signatures
1045          $parse_sig->format_display($config['allow_sig_bbcode'], true, $config['allow_sig_smilies']);
1046          $preview_signature = $parse_sig->message;
1047          unset($parse_sig);
1048      }
1049      else
1050      {
1051          $preview_signature = '';
1052      }
1053   
1054      $preview_subject = censor_text($post_data['post_subject']);
1055   
1056      // Poll Preview
1057      if (!$poll_delete && ($mode == 'post' || ($mode == 'edit' && $post_id == $post_data['topic_first_post_id']/* && (!$post_data['poll_last_vote'] || $auth->acl_get('m_edit', $forum_id))*/))
1058      && $auth->acl_get('f_poll', $forum_id))
1059      {
1060          $parse_poll = new parse_message($post_data['poll_title']);
1061          $parse_poll->bbcode_uid = $message_parser->bbcode_uid;
1062          $parse_poll->bbcode_bitfield = $message_parser->bbcode_bitfield;
1063   
1064          $parse_poll->format_display($post_data['enable_bbcode'], $post_data['enable_urls'], $post_data['enable_smilies']);
1065   
1066          if ($post_data['poll_length'])
1067          {
1068              $poll_end = ($post_data['poll_length'] * 86400) + (($post_data['poll_start']) ? $post_data['poll_start'] : time());
1069          }
1070   
1071          $template->assign_vars(array(
1072              'S_HAS_POLL_OPTIONS'    => (sizeof($post_data['poll_options'])),
1073              'S_IS_MULTI_CHOICE'        => ($post_data['poll_max_options'] > 1) ? true : false,
1074   
1075              'POLL_QUESTION'        => $parse_poll->message,
1076              
1077              'L_POLL_LENGTH'        => ($post_data['poll_length']) ? sprintf($user->lang['POLL_RUN_TILL'], $user->format_date($poll_end)) : '',
1078              'L_MAX_VOTES'        => ($post_data['poll_max_options'] == 1) ? $user->lang['MAX_OPTION_SELECT'] : sprintf($user->lang['MAX_OPTIONS_SELECT'], $post_data['poll_max_options']))
1079          );
1080   
1081          $parse_poll->message = implode("\n", $post_data['poll_options']);
1082          $parse_poll->format_display($post_data['enable_bbcode'], $post_data['enable_urls'], $post_data['enable_smilies']);
1083          $preview_poll_options = explode('<br />', $parse_poll->message);
1084          unset($parse_poll);
1085   
1086          foreach ($preview_poll_options as $key => $option)
1087          {
1088              $template->assign_block_vars('poll_option', array(
1089                  'POLL_OPTION_CAPTION'    => $option,
1090                  'POLL_OPTION_ID'        => $key + 1)
1091              );
1092          }
1093          unset($preview_poll_options);
1094      }
1095   
1096      // Attachment Preview
1097      if (sizeof($message_parser->attachment_data))
1098      {
1099          $template->assign_var('S_HAS_ATTACHMENTS', true);
1100   
1101          $update_count = array();
1102          $attachment_data = $message_parser->attachment_data;
1103   
1104          parse_attachments($forum_id, $preview_message, $attachment_data, $update_count, true);
1105   
1106          foreach ($attachment_data as $i => $attachment)
1107          {
1108              $template->assign_block_vars('attachment', array(
1109                  'DISPLAY_ATTACHMENT'    => $attachment)
1110              );
1111          }
1112          unset($attachment_data);
1113      }
1114   
1115      if (!sizeof($error))
1116      {
1117          $template->assign_vars(array(
1118              'PREVIEW_SUBJECT'        => $preview_subject,
1119              'PREVIEW_MESSAGE'        => $preview_message,
1120              'PREVIEW_SIGNATURE'        => $preview_signature,
1121   
1122              'S_DISPLAY_PREVIEW'        => true)
1123          );
1124      }
1125  }
1126   
1127  // Decode text for message display
1128  $post_data['bbcode_uid'] = ($mode == 'quote' && !$preview && !$refresh && !sizeof($error)) ? $post_data['bbcode_uid'] : $message_parser->bbcode_uid;
1129  $message_parser->decode_message($post_data['bbcode_uid']);
1130   
1131  if ($mode == 'quote' && !$submit && !$preview && !$refresh)
1132  {
1133      $message_parser->message = '[quote=&quot;' . $post_data['quote_username'] . '&quot;]' . censor_text(trim($message_parser->message)) . "[/quote]\n";
1134  }
1135   
1136  if (($mode == 'reply' || $mode == 'quote') && !$submit && !$preview && !$refresh)
1137  {
1138      $post_data['post_subject'] = ((strpos($post_data['post_subject'], 'Re: ') !== 0) ? 'Re: ' : '') . censor_text($post_data['post_subject']);
1139  }
1140   
1141  $attachment_data = $message_parser->attachment_data;
1142  $filename_data = $message_parser->filename_data;
1143  $post_data['post_text'] = $message_parser->message;
1144   
1145  if (sizeof($post_data['poll_options']) && $post_data['poll_title'])
1146  {
1147      $message_parser->message = $post_data['poll_title'];
1148      $message_parser->bbcode_uid = $post_data['bbcode_uid'];
1149   
1150      $message_parser->decode_message();
1151      $post_data['poll_title'] = $message_parser->message;
1152   
1153      $message_parser->message = implode("\n", $post_data['poll_options']);
1154      $message_parser->decode_message();
1155      $post_data['poll_options'] = explode("\n", $message_parser->message);
1156  }
1157  unset($message_parser);
1158   
1159  // MAIN POSTING PAGE BEGINS HERE
1160   
1161  // Forum moderators?
1162  $moderators = array();
1163  get_moderators($moderators, $forum_id);
1164   
1165  // Generate smiley listing
1166  generate_smilies('inline', $forum_id);
1167   
1168  // Generate inline attachment select box
1169  posting_gen_inline_attachments($attachment_data);
1170   
1171  // Do show topic type selection only in first post.
1172  $topic_type_toggle = false;
1173   
1174  if ($mode == 'post' || ($mode == 'edit' && $post_id == $post_data['topic_first_post_id']))
1175  {
1176      $topic_type_toggle = posting_gen_topic_types($forum_id, $post_data['topic_type']);
1177  }
1178   
1179  $s_topic_icons = false;
1180  if ($post_data['enable_icons'] && $auth->acl_get('f_icons', $forum_id))
1181  {
1182      $s_topic_icons = posting_gen_topic_icons($mode, $post_data['icon_id']);
1183  }
1184   
1185  $bbcode_checked        = (isset($post_data['enable_bbcode'])) ? !$post_data['enable_bbcode'] : (($config['allow_bbcode']) ? !$user->optionget('bbcode') : 1);
1186  $smilies_checked    = (isset($post_data['enable_smilies'])) ? !$post_data['enable_smilies'] : (($config['allow_smilies']) ? !$user->optionget('smilies') : 1);
1187  $urls_checked        = (isset($post_data['enable_urls'])) ? !$post_data['enable_urls'] : 0;
1188  $sig_checked        = $post_data['enable_sig'];
1189  $lock_topic_checked    = (isset($topic_lock) && $topic_lock) ? $topic_lock : (($post_data['topic_status'] == ITEM_LOCKED) ? 1 : 0);
1190  $lock_post_checked    = (isset($post_lock)) ? $post_lock : $post_data['post_edit_locked'];
1191   
1192  // If the user is replying or posting and not already watching this topic but set to always being notified we need to overwrite this setting
1193  $notify_set            = ($mode != 'edit' && $config['allow_topic_notify'] && $user->data['is_registered'] && !$post_data['notify_set']) ? $user->data['user_notify'] : $post_data['notify_set'];
1194  $notify_checked        = (isset($notify)) ? $notify : (($mode == 'post') ? $user->data['user_notify'] : $notify_set);
1195   
1196  // Page title & action URL, include session_id for security purpose
1197  $s_action = append_sid("{$phpbb_root_path}posting.$phpEx", "mode=$mode&amp;f=$forum_id", true, $user->session_id);
1198  $s_action .= ($topic_id) ? "&amp;t=$topic_id" : '';
1199  $s_action .= ($post_id) ? "&amp;p=$post_id" : '';
1200   
1201  switch ($mode)
1202  {
1203      case 'post':
1204          $page_title = $user->lang['POST_TOPIC'];
1205      break;
1206   
1207      case 'quote':
1208      case 'reply':
1209          $page_title = $user->lang['POST_REPLY'];
1210      break;
1211   
1212      case 'delete':
1213      case 'edit':
1214          $page_title = $user->lang['EDIT_POST'];
1215      break;
1216  }
1217   
1218  // Build Navigation Links
1219  generate_forum_nav($post_data);
1220   
1221  // Build Forum Rules
1222  generate_forum_rules($post_data);
1223   
1224  if ($config['enable_post_confirm'] && !$user->data['is_registered'] && $solved_captcha === false && ($mode == 'post' || $mode == 'reply' || $mode == 'quote'))
1225  {
1226      // Show confirm image
1227      $sql = 'DELETE FROM ' . CONFIRM_TABLE . "
1228          WHERE session_id = '" . $db->sql_escape($user->session_id) . "'
1229              AND confirm_type = " . CONFIRM_POST;
1230      $db->sql_query($sql);
1231   
1232      // Generate code
1233      $code = gen_rand_string(mt_rand(5, 8));
1234      $confirm_id = md5(unique_id($user->ip));
1235      $seed = hexdec(substr(unique_id(), 4, 10));
1236   
1237      // compute $seed % 0x7fffffff
1238      $seed -= 0x7fffffff * floor($seed / 0x7fffffff);
1239   
1240      $sql = 'INSERT INTO ' . CONFIRM_TABLE . ' ' . $db->sql_build_array('INSERT', array(
1241          'confirm_id'    => (string) $confirm_id,
1242          'session_id'    => (string) $user->session_id,
1243          'confirm_type'    => (int) CONFIRM_POST,
1244          'code'            => (string) $code,
1245          'seed'            => (int) $seed)
1246      );
1247      $db->sql_query($sql);
1248   
1249      $template->assign_vars(array(
1250          'S_CONFIRM_CODE'            => true,
1251          'CONFIRM_ID'                => $confirm_id,
1252          'CONFIRM_IMAGE'                => '<img src="' . append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=confirm&amp;id=' . $confirm_id . '&amp;type=' . CONFIRM_POST) . '" alt="" title="" />',
1253          'L_POST_CONFIRM_EXPLAIN'    => sprintf($user->lang['POST_CONFIRM_EXPLAIN'], '<a href="mailto:' . htmlspecialchars($config['board_contact']) . '">', '</a>'),
1254      ));
1255  }
1256   
1257  $s_hidden_fields = ($mode == 'reply' || $mode == 'quote') ? '<input type="hidden" name="topic_cur_post_id" value="' . $post_data['topic_last_post_id'] . '" />' : '';
1258  $s_hidden_fields .= '<input type="hidden" name="lastclick" value="' . $current_time . '" />';
1259  $s_hidden_fields .= ($draft_id || isset($_REQUEST['draft_loaded'])) ? '<input type="hidden" name="draft_loaded" value="' . request_var('draft_loaded', $draft_id) . '" />' : '';
1260   
1261  // Add the confirm id/code pair to the hidden fields, else an error is displayed on next submit/preview
1262  if ($solved_captcha !== false)
1263  {
1264      $s_hidden_fields .= build_hidden_fields(array(
1265          'confirm_id'        => request_var('confirm_id', ''),
1266          'confirm_code'        => request_var('confirm_code', ''))
1267      );
1268  }
1269   
1270  $form_enctype = (@ini_get('file_uploads') == '0' || strtolower(@ini_get('file_uploads')) == 'off' || @ini_get('file_uploads') == '0' || !$config['allow_attachments'] || !$auth->acl_get('u_attach') || !$auth->acl_get('f_attach', $forum_id)) ? '' : ' enctype="multipart/form-data"';
1271  add_form_key('posting');
1272   
1273   
1274  // Start assigning vars for main posting page ...
1275  $template->assign_vars(array(
1276      'L_POST_A'                    => $page_title,
1277      'L_ICON'                    => ($mode == 'reply' || $mode == 'quote' || ($mode == 'edit' && $post_id != $post_data['topic_first_post_id'])) ? $user->lang['POST_ICON'] : $user->lang['TOPIC_ICON'],
1278      'L_MESSAGE_BODY_EXPLAIN'    => (intval($config['max_post_chars'])) ? sprintf($user->lang['MESSAGE_BODY_EXPLAIN'], intval($config['max_post_chars'])) : '',
1279   
1280      'FORUM_NAME'            => $post_data['forum_name'],
1281      'FORUM_DESC'            => ($post_data['forum_desc']) ? generate_text_for_display($post_data['forum_desc'], $post_data['forum_desc_uid'], $post_data['forum_desc_bitfield'], $post_data['forum_desc_options']) : '',
1282      'TOPIC_TITLE'            => censor_text($post_data['topic_title']),
1283      'MODERATORS'            => (sizeof($moderators)) ? implode(', ', $moderators[$forum_id]) : '',
1284      'USERNAME'                => ((!$preview && $mode != 'quote') || $preview) ? $post_data['username'] : '',
1285      'SUBJECT'                => $post_data['post_subject'],
1286      'MESSAGE'                => $post_data['post_text'],
1287      'BBCODE_STATUS'            => ($bbcode_status) ? sprintf($user->lang['BBCODE_IS_ON'], '<a href="' . append_sid("{$phpbb_root_path}faq.$phpEx", 'mode=bbcode') . '">', '</a>') : sprintf($user->lang['BBCODE_IS_OFF'], '<a href="' . append_sid("{$phpbb_root_path}faq.$phpEx", 'mode=bbcode') . '">', '</a>'),
1288      'IMG_STATUS'            => ($img_status) ? $user->lang['IMAGES_ARE_ON'] : $user->lang['IMAGES_ARE_OFF'],
1289      'FLASH_STATUS'            => ($flash_status) ? $user->lang['FLASH_IS_ON'] : $user->lang['FLASH_IS_OFF'],
1290      'SMILIES_STATUS'        => ($smilies_status) ? $user->lang['SMILIES_ARE_ON'] : $user->lang['SMILIES_ARE_OFF'],
1291      'URL_STATUS'            => ($bbcode_status && $url_status) ? $user->lang['URL_IS_ON'] : $user->lang['URL_IS_OFF'],
1292      'MINI_POST_IMG'            => $user->img('icon_post_target', $user->lang['POST']),
1293      'POST_DATE'                => ($post_data['post_time']) ? $user->format_date($post_data['post_time']) : '',
1294      'ERROR'                    => (sizeof($error)) ? implode('<br />', $error) : '',
1295      'TOPIC_TIME_LIMIT'        => (int) $post_data['topic_time_limit'],
1296      'EDIT_REASON'            => $post_data['post_edit_reason'],
1297      'U_VIEW_FORUM'            => append_sid("{$phpbb_root_path}viewforum.$phpEx", "f=$forum_id"),
1298      'U_VIEW_TOPIC'            => ($mode != 'post') ? append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&amp;t=$topic_id") : '',
1299      'U_PROGRESS_BAR'        => append_sid("{$phpbb_root_path}posting.$phpEx", "f=$forum_id&amp;mode=popup"),
1300      'UA_PROGRESS_BAR'        => addslashes(append_sid("{$phpbb_root_path}posting.$phpEx", "f=$forum_id&amp;mode=popup")),
1301   
1302      'S_PRIVMSGS'                => false,
1303      'S_CLOSE_PROGRESS_WINDOW'    => (isset($_POST['add_file'])) ? true : false,
1304      'S_EDIT_POST'                => ($mode == 'edit') ? true : false,
1305      'S_EDIT_REASON'                => ($mode == 'edit' && $auth->acl_get('m_edit', $forum_id)) ? true : false,
1306      'S_DISPLAY_USERNAME'        => (!$user->data['is_registered'] || ($mode == 'edit' && $post_data['poster_id'] == ANONYMOUS)) ? true : false,
1307      'S_SHOW_TOPIC_ICONS'        => $s_topic_icons,
1308      'S_DELETE_ALLOWED'            => ($mode == 'edit' && (($post_id == $post_data['topic_last_post_id'] && $post_data['poster_id'] == $user->data['user_id'] && $auth->acl_get('f_delete', $forum_id)) || $auth->acl_get('m_delete', $forum_id))) ? true : false,
1309      'S_BBCODE_ALLOWED'            => $bbcode_status,
1310      'S_BBCODE_CHECKED'            => ($bbcode_checked) ? ' checked="checked"' : '',
1311      'S_SMILIES_ALLOWED'            => $smilies_status,
1312      'S_SMILIES_CHECKED'            => ($smilies_checked) ? ' checked="checked"' : '',
1313      'S_SIG_ALLOWED'                => ($auth->acl_get('f_sigs', $forum_id) && $config['allow_sig'] && $user->data['is_registered']) ? true : false,
1314      'S_SIGNATURE_CHECKED'        => ($sig_checked) ? ' checked="checked"' : '',
1315      'S_NOTIFY_ALLOWED'            => (!$user->data['is_registered'] || ($mode == 'edit' && $user->data['user_id'] != $post_data['poster_id']) || !$config['allow_topic_notify'] || !$config['email_enable']) ? false : true,
1316      'S_NOTIFY_CHECKED'            => ($notify_checked) ? ' checked="checked"' : '',
1317      'S_LOCK_TOPIC_ALLOWED'        => (($mode == 'edit' || $mode == 'reply' || $mode == 'quote') && ($auth->acl_get('m_lock', $forum_id) || ($auth->acl_get('f_user_lock', $forum_id) && $user->data['is_registered'] && !empty($post_data['topic_poster']) && $user->data['user_id'] == $post_data['topic_poster'] && $post_data['topic_status'] == ITEM_UNLOCKED))) ? true : false,
1318      'S_LOCK_TOPIC_CHECKED'        => ($lock_topic_checked) ? ' checked="checked"' : '',
1319      'S_LOCK_POST_ALLOWED'        => ($mode == 'edit' && $auth->acl_get('m_edit', $forum_id)) ? true : false,
1320      'S_LOCK_POST_CHECKED'        => ($lock_post_checked) ? ' checked="checked"' : '',
1321      'S_LINKS_ALLOWED'            => $url_status,
1322      'S_MAGIC_URL_CHECKED'        => ($urls_checked) ? ' checked="checked"' : '',
1323      'S_TYPE_TOGGLE'                => $topic_type_toggle,
1324      'S_SAVE_ALLOWED'            => ($auth->acl_get('u_savedrafts') && $user->data['is_registered'] && $mode != 'edit') ? true : false,
1325      'S_HAS_DRAFTS'                => ($auth->acl_get('u_savedrafts') && $user->data['is_registered'] && $post_data['drafts']) ? true : false,
1326      'S_FORM_ENCTYPE'            => $form_enctype,
1327   
1328      'S_BBCODE_IMG'            => $img_status,
1329      'S_BBCODE_URL'            => $url_status,
1330      'S_BBCODE_FLASH'        => $flash_status,
1331      'S_BBCODE_QUOTE'        => $quote_status,
1332   
1333      'S_POST_ACTION'            => $s_action,
1334      'S_HIDDEN_FIELDS'        => $s_hidden_fields)
1335  );
1336   
1337  // Build custom bbcodes array
1338  display_custom_bbcodes();
1339   
1340  // Poll entry
1341  if (($mode == 'post' || ($mode == 'edit' && $post_id == $post_data['topic_first_post_id']/* && (!$post_data['poll_last_vote'] || $auth->acl_get('m_edit', $forum_id))*/))
1342      && $auth->acl_get('f_poll', $forum_id))
1343  {
1344      $template->assign_vars(array(
1345          'S_SHOW_POLL_BOX'        => true,
1346          'S_POLL_VOTE_CHANGE'    => ($auth->acl_get('f_votechg', $forum_id)),
1347          'S_POLL_DELETE'            => ($mode == 'edit' && sizeof($post_data['poll_options']) && ((!$post_data['poll_last_vote'] && $post_data['poster_id'] == $user->data['user_id'] && $auth->acl_get('f_delete', $forum_id)) || $auth->acl_get('m_delete', $forum_id))),
1348          'S_POLL_DELETE_CHECKED'    => (!empty($poll_delete)) ? true : false,
1349   
1350          'L_POLL_OPTIONS_EXPLAIN'    => sprintf($user->lang['POLL_OPTIONS_' . (($mode == 'edit') ? 'EDIT_' : '') . 'EXPLAIN'], $config['max_poll_options']),
1351   
1352          'VOTE_CHANGE_CHECKED'    => (!empty($post_data['poll_vote_change'])) ? ' checked="checked"' : '',
1353          'POLL_TITLE'            => (isset($post_data['poll_title'])) ? $post_data['poll_title'] : '',
1354          'POLL_OPTIONS'            => (!empty($post_data['poll_options'])) ? implode("\n", $post_data['poll_options']) : '',
1355          'POLL_MAX_OPTIONS'        => (isset($post_data['poll_max_options'])) ? (int) $post_data['poll_max_options'] : 1,
1356          'POLL_LENGTH'            => $post_data['poll_length'])
1357      );
1358  }
1359   
1360  // Attachment entry
1361  // Not using acl_gets here, because it is using OR logic
1362  if ($auth->acl_get('f_attach', $forum_id) && $auth->acl_get('u_attach') && $config['allow_attachments'] && $form_enctype)
1363  {
1364      posting_gen_attachment_entry($attachment_data, $filename_data);
1365  }
1366   
1367  // Output page ...
1368  page_header($page_title);
1369   
1370  $template->set_filenames(array(
1371      'body' => 'posting_body.html')
1372  );
1373   
1374  make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));
1375   
1376  // Topic review
1377  if ($mode == 'reply' || $mode == 'quote')
1378  {
1379      if (topic_review($topic_id, $forum_id))
1380      {
1381          $template->assign_var('S_DISPLAY_REVIEW', true);
1382      }
1383  }
1384   
1385  page_footer();
1386   
1387  /**
1388  * Show upload popup (progress bar)
1389  */
1390  function upload_popup($forum_style = 0)
1391  {
1392      global $template, $user;
1393   
1394      ($forum_style) ? $user->setup('posting', $forum_style) : $user->setup('posting');
1395   
1396      page_header($user->lang['PROGRESS_BAR']);
1397   
1398      $template->set_filenames(array(
1399          'popup'    => 'posting_progress_bar.html')
1400      );
1401   
1402      $template->assign_vars(array(
1403          'PROGRESS_BAR'    => $user->img('upload_bar', $user->lang['UPLOAD_IN_PROGRESS']))
1404      );
1405   
1406      $template->display('popup');
1407  }
1408   
1409  /**
1410  * Do the various checks required for removing posts as well as removing it
1411  */
1412  function handle_post_delete($forum_id, $topic_id, $post_id, &$post_data)
1413  {
1414      global $user, $db, $auth;
1415      global $phpbb_root_path, $phpEx;
1416   
1417      // If moderator removing post or user itself removing post, present a confirmation screen
1418      if ($auth->acl_get('m_delete', $forum_id) || ($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && $auth->acl_get('f_delete', $forum_id) && $post_id == $post_data['topic_last_post_id']))
1419      {
1420          $s_hidden_fields = build_hidden_fields(array(
1421              'p'        => $post_id,
1422              'f'        => $forum_id,
1423              'mode'    => 'delete')
1424          );
1425   
1426          if (confirm_box(true))
1427          {
1428              $data = array(
1429                  'topic_first_post_id'    => $post_data['topic_first_post_id'],
1430                  'topic_last_post_id'    => $post_data['topic_last_post_id'],
1431                  'topic_approved'        => $post_data['topic_approved'],
1432                  'topic_type'            => $post_data['topic_type'],
1433                  'post_approved'            => $post_data['post_approved'],
1434                  'post_reported'            => $post_data['post_reported'],
1435                  'post_time'                => $post_data['post_time'],
1436                  'poster_id'                => $post_data['poster_id'],
1437                  'post_postcount'        => $post_data['post_postcount']
1438              );
1439   
1440              $next_post_id = delete_post($forum_id, $topic_id, $post_id, $data);
1441   
1442              if ($post_data['topic_first_post_id'] == $post_data['topic_last_post_id'])
1443              {
1444                  add_log('mod', $forum_id, $topic_id, 'LOG_DELETE_TOPIC', $post_data['topic_title']);
1445   
1446                  $meta_info = append_sid("{$phpbb_root_path}viewforum.$phpEx", "f=$forum_id");
1447                  $message = $user->lang['POST_DELETED'];
1448              }
1449              else
1450              {
1451                  add_log('mod', $forum_id, $topic_id, 'LOG_DELETE_POST', $post_data['post_subject']);
1452   
1453                  $meta_info = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&amp;t=$topic_id&amp;p=$next_post_id") . "#p$next_post_id";
1454                  $message = $user->lang['POST_DELETED'] . '<br /><br />' . sprintf($user->lang['RETURN_TOPIC'], '<a href="' . $meta_info . '">', '</a>');
1455              }
1456   
1457              meta_refresh(3, $meta_info);
1458              $message .= '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id) . '">', '</a>');
1459              trigger_error($message);
1460          }
1461          else
1462          {
1463              confirm_box(false, 'DELETE_MESSAGE', $s_hidden_fields);
1464          }
1465      }
1466   
1467      // If we are here the user is not able to delete - present the correct error message
1468      if ($post_data['poster_id'] != $user->data['user_id'] && $auth->acl_get('f_delete', $forum_id))
1469      {
1470          trigger_error('DELETE_OWN_POSTS');
1471      }
1472   
1473      if ($post_data['poster_id'] == $user->data['user_id'] && $auth->acl_get('f_delete', $forum_id) && $post_id != $post_data['topic_last_post_id'])
1474      {
1475          trigger_error('CANNOT_DELETE_REPLIED');
1476      }
1477   
1478      trigger_error('USER_CANNOT_DELETE');
1479  }
1480   
1481  ?>