Полезная информация


----

Начать новую тему Ответить на тему
АвторСообщение

 Сообщение E-mail уведомления в phpbb3 2011-11-08

Аватар пользователя

Содержание

1)Введение

2)Описание и расположение файлов

3)Используемые переменные

4)Правила редактирования

1)Введение

В форумах на движке phpbb3 реализована неплохая система уведомлений пользователей на e-mail адрес. Уведомления приходят в случае регистрации(как с подтверждением, так и с активацией администратором), подпиской на новые сообщения в любой теме и т.д и т.п. Данная статья посвящена данному вопросу, а конкретно будет рассмотрена возможность редатирования текста отсылаемых писем пользователям. Все будет рассматриваться на примере последней руссифицированной, 3.0.9, версии форума.

2)Описание и расположение файлов

Все необходимые файлы лежат по пути
Цитата:
/language/ru/email/

В чистой версии форума таких файлов 33 штуки, опишу за что отвечает каждый из них
Цитата:
admin_activate.txt - Если у вас на форуме включена активация пользователей администратором, то письмо с таким содержанием придет на почту админу. В нем будет запрос на активацию нового пользователя.
admin_send_email.txt - Сообщение, приходящее пользователю при массовой либо выборочной рассылке администратором через администраторский центр.
admin_welcome_activated.txt - Сообщение, приходящее пользователю в случае успешной активации его учетной записи администратором.
admin_welcome_inactive.txt - Сообщение, приходящее пользователю в случае регистрации с активацией учетной записи администратором. В нем сообщается о том, что учетная запись создана и ждет активации администратором.
coppa_resend_inactive.txt и coppa_welcome_inactive.txt - Одинаковые по смыслу сообщения, приходят после регистрации пользователю. В данном случае должен быть включен механизм регистрации COPPA
email_notify.txt - Сообщение приходит в том случае если у пользователя есть друг на форуме и он решил с ним поделиться какой-либо темой. Сообщение содержит информацию и ссылку на тему, которой хотят поделиться с пользователем.
forum_notify.txt - Сообщение приходит в случае появления новых тем и сообщений в конкретном форуме(при этом пользователь должен быть на него подписан).
group_added.txt - Сообщение приходит пользователю если его успешно включают(перемещают) из одной форумной группы в другую.
group_approved.txt - Сообщение приходит пользователю в случае успешно поданной(подтвержденной) заявки на вступление в какую-либо форумную группу.
group_request.txt - Сообщение приходит лидеру форумной группы, в котором сообщается о новой поданной заявке на вступление от пользователя.
installed.txt - Сообщение приходит администратору форума после его успешной установки.
newtopic_notify.txt - Сообщение приходит в случае появления новых тем в конкретном форуме(при этом пользователь должен быть на него подписан).
pm_report_closed.txt - Уведомление о закрытой жалобе на личное сообщение от другого пользователя.
pm_report_deleted.txt - Уведомление о удалении жалобы на личное сообщение от другого пользователя.
post_approved.txt - Уведомление о одобренном сообщении пользователя. Приходит в случае когда установлена настройка проверки сообщений модератором перед их размещением.
post_disapproved.txt - Уведомление о не одобренном сообщении пользователя. В письме так же указана причина отклонения сообщения. Приходит в случае когда установлена настройка проверки сообщений модератором перед их размещением.
privmsg_notify.txt - Уведомление пользователя о полученном новом личном сообщении.
profile_send_email.txt - Сообщение приходит в том случае, когда пользователю другой пользователь отсылает письмо на e-mail адрес через форму, установленую на форуме.
profile_send_im.txt] - Сообщение приходит в том случае, когда пользователю другой пользователь отсылает письмо с помощью сервиса IM.
report_closed.txt - Уведомление о закрытой жалобе на сообщение от другого пользователя в какой-либо теме.
report_deleted.txt - Уведомление о удаленной жалобе на сообщение от другого пользователя в какой-либо теме.
topic_approved.txt - Уведомление о одобренной теме пользователя. Приходит в случае когда установлена настройка проверки тем модератором перед их размещением.
topic_disapproved.txt - Уведомление о не одобренной теме пользователя. В письме так же указана причина отклонения темы. Приходит в случае когда установлена настройка проверки тем модератором перед их размещением.
topic_notify.txt - Сообщение приходит в случае появления новых ответов в конкретной теме(при этом пользователь должен быть подписан на эту тему).
user_activate.txt - Сообщение о деактивации администратором учетной записи пользователя. Внутри располагается ссылка на повторную активацию.
user_activate_inactive.txt - Сообщение о деактивации учетной записи пользователя. Администратор должен произвести повторную активацию.
user_activate_passwd.txt - Сообщение содержит в себе информацию по восстановлению забытого пароля.
user_reactivate_account.txt - Уведомление о том, что администратор пожелал чтобы пользователь вновь активировал свою учетную запись.
user_remind_inactive.txt - Уведомление о том, что пользователь до сих пор не активировал свою учетную запись.
user_resend_inactive.txt - Уведомление о том, что пользователь должен активировать свою учетную запись, перейдя по заранее сгенерированной ссылке.
user_welcome.txt - Уведомление о успешной регистрации на форуме.
user_welcome_inactive.txt - Уведомление о том, что пользователь должен активировать свою учетную запись, перейдя по заранее сгенерированной ссылке.


3)Используемые переменные

Пункт будет дописан в ближайшее время !!!

4)Правила редактирования

Правил редактирования всего лишь 3.
1) Перед редактированием файлы сохраняются в кодировке UTF-8 без BOOM
2) После обратной закачки файлов на сервер обязательно нужно почистить кеш форума через центр администрирования.
3) Редактирование файлов желательно осуществлять более продвинутыми текстовыми редакторами, например Notepad .
Успехов, все вопросы задаем в этой теме.
:(


_________________
Подпись:
-_- -_-
На вопросы, связанные с phpBB, по ЛС не отвечаю !!!

Теги темы
E-mail уведомления в phpbb3
          Вернуться наверх  
 


Аватар пользователя

DeaDRoMeO писал(а):

Пытался, но понял что ненужная это вещь

Интересно знать, почему?

DeaDRoMeO писал(а):

По вопросу - давайте полный код posting.php и posting_editor.html - может где то в коде прячется магия, потому как ну невозможно такое чтобы при создании темы там уже галочка стояла


posting_editor.html
<script type="text/javascript">
// <![CDATA[
   onload_functions.push('apply_onkeypress_event()');
// ]]>
</script>

<fieldset class="fields1">
   <!-- IF ERROR --><p class="error">{ERROR}</p><!-- ENDIF -->

   <!-- IF S_PRIVMSGS and not S_SHOW_DRAFTS -->

      <div class="column1">
      <!-- IF S_ALLOW_MASS_PM -->
         <!-- IF .to_recipient -->
            <dl>
               <dt><label>{L_TO}:</label></dt>
               <dd>
                  <!-- BEGIN to_recipient -->
                     <!-- IF not to_recipient.S_FIRST_ROW and to_recipient.S_ROW_COUNT mod 2 eq 0 --></dd><dd><!-- ENDIF -->
                     <!-- IF to_recipient.IS_GROUP --><a href="{to_recipient.U_VIEW}"><strong>{to_recipient.NAME}</strong></a>&nbsp;<!-- ELSE -->{to_recipient.NAME_FULL}&nbsp;<!-- ENDIF -->
                     <!-- IF not S_EDIT_POST --><input type="submit" name="remove_{to_recipient.TYPE}[{to_recipient.UG_ID}]" value="x" class="button2" />&nbsp;<!-- ENDIF -->
                  <!-- END to_recipient -->
               </dd>
            </dl>
         <!-- ENDIF -->
         <!-- IF .bcc_recipient -->
            <dl>
               <dt><label>{L_BCC}:</label></dt>
               <dd>
                  <!-- BEGIN bcc_recipient -->
                     <!-- IF not bcc_recipient.S_FIRST_ROW and bcc_recipient.S_ROW_COUNT mod 2 eq 0 --></dd><dd><!-- ENDIF -->
                     <!-- IF bcc_recipient.IS_GROUP --><a href="{bcc_recipient.U_VIEW}"><strong>{bcc_recipient.NAME}</strong></a><!-- ELSE -->{bcc_recipient.NAME_FULL}&nbsp;<!-- ENDIF -->
                     <!-- IF not S_EDIT_POST --><input type="submit" name="remove_{bcc_recipient.TYPE}[{bcc_recipient.UG_ID}]" value="x" class="button2" />&nbsp;<!-- ENDIF -->
                  <!-- END bcc_recipient -->
               </dd>
            </dl>
         <!-- ENDIF -->
         <!-- IF not S_EDIT_POST -->
         <dl class="pmlist">
            <dt><textarea id="username_list" name="username_list" class="inputbox" cols="50" rows="2"></textarea></dt>
            <dd><span><a href="{U_FIND_USERNAME}" onclick="find_username(this.href); return false;">{L_FIND_USERNAME}</a></span></dd>
            <dd><input type="submit" name="add_to" value="{L_ADD}" class="button2" /></dd>
            <dd><input type="submit" name="add_bcc" value="{L_ADD_BCC}" class="button2" /></dd>
         </dl>
         <!-- ENDIF -->
      <!-- ELSE -->
         <dl>
            <dt><label for="username_list">{L_TO}:</label><!-- IF not S_EDIT_POST --><br /><span><a href="{U_FIND_USERNAME}" onclick="find_username(this.href); return false">{L_FIND_USERNAME}</a></span><!-- ENDIF --></dt>
            <!-- IF .to_recipient -->
               <dd>
                  <!-- BEGIN to_recipient -->
                     <!-- IF not to_recipient.S_FIRST_ROW and to_recipient.S_ROW_COUNT mod 2 eq 0 --></dd><dd><!-- ENDIF -->
                     <!-- IF to_recipient.IS_GROUP --><a href="{to_recipient.U_VIEW}"><strong>{to_recipient.NAME}</strong></a><!-- ELSE -->{to_recipient.NAME_FULL}&nbsp;<!-- ENDIF -->
                     <!-- IF not S_EDIT_POST --><input type="submit" name="remove_{to_recipient.TYPE}[{to_recipient.UG_ID}]" value="x" class="button2" />&nbsp;<!-- ENDIF -->
                  <!-- END to_recipient -->
               </dd>
            <!-- ENDIF -->

            <!-- IF not S_EDIT_POST -->
            <dd><input class="inputbox" type="text" name="username_list" id="username_list" size="20" value="" /> <input type="submit" name="add_to" value="{L_ADD}" class="button2" /></dd>
            <!-- ENDIF -->
         </dl>
      <!-- ENDIF -->

      </div>

      <!-- IF S_GROUP_OPTIONS -->
         <div class="column2">
            <dl>
               <dd><label for="group_list">{L_USERGROUPS}:</label> <select name="group_list[]" id="group_list" multiple="multiple" size="4" class="inputbox">{S_GROUP_OPTIONS}</select></dd>
            </dl>
         </div>
      <!-- ENDIF -->

      <div class="clear"></div>

   <!-- ENDIF -->

   <!-- IF S_DELETE_ALLOWED -->
   <dl>
      <dt><label for="delete">{L_DELETE_POST}:</label></dt>
      <dd><label for="delete"><input type="checkbox" name="delete" id="delete" /> {L_DELETE_POST_WARN}</label></dd>
   </dl>
   <!-- ENDIF -->

   <!-- IF S_SHOW_TOPIC_ICONS or S_SHOW_PM_ICONS -->
   <dl>
      <dt><label for="icon">{L_ICON}:</label></dt>
      <dd>
         <label for="icon"><input type="radio" name="icon" id="icon" value="0" checked="checked" /> <!-- IF S_SHOW_TOPIC_ICONS -->{L_NO_TOPIC_ICON}<!-- ELSE -->{L_NO_PM_ICON}<!-- ENDIF --></label>
         <!-- BEGIN topic_icon --><label for="icon-{topic_icon.ICON_ID}"><input type="radio" name="icon" id="icon-{topic_icon.ICON_ID}" value="{topic_icon.ICON_ID}" {topic_icon.S_ICON_CHECKED} /><img src="{topic_icon.ICON_IMG}" width="{topic_icon.ICON_WIDTH}" height="{topic_icon.ICON_HEIGHT}" alt="" title="" /></label> <!-- END topic_icon -->
      </dd>
   </dl>
   <!-- ENDIF -->

   <!-- IF not S_PRIVMSGS and S_DISPLAY_USERNAME -->
   <dl style="clear: left;">
      <dt><label for="username">{L_USERNAME}:</label></dt>
      <dd><input type="text" tabindex="1" name="username" id="username" size="25" value="{USERNAME}" class="inputbox autowidth" /></dd>
   </dl>
   <!-- ENDIF -->

   <!-- IF S_POST_ACTION or S_PRIVMSGS or S_EDIT_DRAFT -->
   <dl style="clear: left;">
      <dt><label for="subject">{L_SUBJECT}:</label></dt>
      <dd><input type="text" name="subject" id="subject" size="45" maxlength="<!-- IF S_NEW_MESSAGE -->60<!-- ELSE -->64<!-- ENDIF -->" tabindex="2" value="{SUBJECT}{DRAFT_SUBJECT}" class="inputbox autowidth" /></dd>
   </dl>
      <!-- IF S_TOPIC_SEO -->
       <!-- IF not S_PRIVMSGS and S_NEW_MESSAGE --><!-- IF U_TOPIC_SEO_DESC -->   
    <dl style="clear: left;">
        <dt><label for="topic_seo_title">{L_TOPIC_SEO_TITLE}:</label><br /></dt>
        <dd><input type="text" name="topic_seo_title" id="topic_seo_title" size="80" value="{TOPIC_SEO_TITLE}" maxlength="255" class="inputbox autowidth" /></dd>
    </dl>         
    <dl style="clear: left;">
        <dt><label for="seo_desc">{L_TOPIC_SEO_DESCRIPTION}:</label></dt>
        <dd><textarea name="seo_desc" id="seo_desc" rows="3" cols="30" class="inputbox">{SEO_DESC}</textarea></dd>
    </dl><!-- ENDIF --><!-- IF U_TOPIC_SEO_KEY -->
    <dl style="clear: left;">
        <dt><label for="seo_key">{L_TOPIC_SEO_KEYWORDS}:</label><br />{L_TOPIC_SEO_KEY_EXPLAIN}</dt>
        <dd><input type="text" name="seo_key" id="seo_key" size="80" value="{SEO_KEY}" maxlength="255" class="inputbox autowidth" /></dd>
    </dl>
    <!-- ENDIF --><!-- ENDIF -->
   <!-- IF not S_PRIVMSGS and not S_NEW_MESSAGE and U_SEO_POST_KEY -->
    <dl style="clear: left;">
        <dt><label for="seo_post_key">{L_POST_SEO_KEYWORDS}:</label><br />{L_POST_KEYWORD_EXPLAIN}</dt>
        <dd><input type="text" name="seo_post_key" id="seo_post_key" size="80" value="{SEO_POST_KEY}" maxlength="255" class="inputbox autowidth" /></dd>
    </dl>
    <!-- ENDIF --><!-- ENDIF -->
   <!-- IF CAPTCHA_TEMPLATE and S_CONFIRM_CODE -->
      <!-- DEFINE $CAPTCHA_TAB_INDEX = 3 -->
      <!-- INCLUDE {CAPTCHA_TEMPLATE} -->
   <!-- ENDIF -->
   <!-- ENDIF -->

   <!-- INCLUDE posting_buttons.html -->

   <div id="smiley-box" style="max-height: 300px; overflow: auto;">
      <!-- IF S_SMILIES_ALLOWED and .smiley -->
         <strong>{L_SMILIES}</strong><br />
         <!-- BEGIN smiley -->
            <a href="#" onclick="insert_text('{smiley.A_SMILEY_CODE}', true); return false;"><img src="{smiley.SMILEY_IMG}" width="{smiley.SMILEY_WIDTH}" height="{smiley.SMILEY_HEIGHT}" alt="{smiley.SMILEY_CODE}" title="{smiley.SMILEY_DESC}" /></a>
         <!-- END smiley -->
      <!-- ENDIF -->
      <!-- IF S_SHOW_SMILEY_LINK and S_SMILIES_ALLOWED-->
         <br /><a href="{U_MORE_SMILIES}" onclick="popup(this.href, 300, 350, '_phpbbsmilies'); return false;">{L_MORE_SMILIES}</a>
      <!-- ENDIF -->

      <!-- IF BBCODE_STATUS -->
      <!-- IF .smiley --><hr /><!-- ENDIF -->
      {BBCODE_STATUS}<br />
      <!-- IF S_BBCODE_ALLOWED -->
         {IMG_STATUS}<br />
         {FLASH_STATUS}<br />
         {URL_STATUS}<br />
      <!-- ENDIF -->
      {SMILIES_STATUS}
      <!-- ENDIF -->
      <!-- IF S_EDIT_DRAFT || S_DISPLAY_REVIEW -->
         <!-- IF S_DISPLAY_REVIEW --><hr /><!-- ENDIF -->
         <!-- IF S_EDIT_DRAFT --><strong><a href="{S_UCP_ACTION}">{L_BACK_TO_DRAFTS}</a></strong><!-- ENDIF -->
         <!-- IF S_DISPLAY_REVIEW --><strong><a href="#review">{L_TOPIC_REVIEW}</a></strong><!-- ENDIF -->
      <!-- ENDIF -->
   </div>

   <div id="message-box">
      <textarea <!-- IF S_UCP_ACTION and not S_PRIVMSGS and not S_EDIT_DRAFT -->name="signature" id="signature" style="height: 9em;"<!-- ELSE -->name="message" id="message"<!-- ENDIF --> rows="15" cols="76" tabindex="4" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);" onfocus="initInsertions();" class="inputbox">{MESSAGE}{DRAFT_MESSAGE}{SIGNATURE}</textarea>
   </div>
</fieldset>

<!-- IF $EXTRA_POSTING_OPTIONS eq 1 -->

   <!-- IF not S_SHOW_DRAFTS -->
      <span class="corners-bottom"><span></span></span></div>
   </div>
   <!-- ENDIF -->

   <!-- IF S_HAS_ATTACHMENTS -->
      <div class="panel bg2">
         <div class="inner"><span class="corners-top"><span></span></span>
         <h3>{L_POSTED_ATTACHMENTS}</h3>

         <fieldset class="fields2">

         <!-- BEGIN attach_row -->
         <dl>

            <dt><label for="comment_list_{attach_row.ASSOC_INDEX}">{L_FILE_COMMENT}:</label></dt>
            <dd><textarea name="comment_list[{attach_row.ASSOC_INDEX}]" id="comment_list_{attach_row.ASSOC_INDEX}" rows="1" cols="35" class="inputbox">{attach_row.FILE_COMMENT}</textarea></dd>
            <dd><a href="{attach_row.U_VIEW_ATTACHMENT}" class="{S_CONTENT_FLOW_END}">{attach_row.FILENAME}</a></dd>
            <dd style="margin-top: 5px;">
               <!-- IF S_INLINE_ATTACHMENT_OPTIONS --><input type="button" value="{L_PLACE_INLINE}" onclick="attach_inline({attach_row.ASSOC_INDEX}, '{attach_row.A_FILENAME}');" class="button2" />&nbsp; <!-- ENDIF -->
               <input type="submit" name="delete_file[{attach_row.ASSOC_INDEX}]" value="{L_DELETE_FILE}" class="button2" />
            </dd>
         </dl>
         {attach_row.S_HIDDEN}
            <!-- IF not attach_row.S_LAST_ROW --><hr class="dashed" /><!-- ENDIF -->
         <!-- END attach_row -->

         </fieldset>

         <span class="corners-bottom"><span></span></span></div>
      </div>
   <!-- ENDIF -->

   <!-- IF not S_SHOW_DRAFTS and not $SIG_EDIT eq 1 -->
   <div class="panel bg2">
      <div class="inner"><span class="corners-top"><span></span></span>
      <fieldset class="submit-buttons">
         {S_HIDDEN_ADDRESS_FIELD}
         {S_HIDDEN_FIELDS}
         <!-- IF S_HAS_DRAFTS --><input type="submit" accesskey="d" tabindex="8" name="load" value="{L_LOAD_DRAFT}" class="button2" onclick="load_draft = true;" />&nbsp; <!-- ENDIF -->
         <!-- IF S_SAVE_ALLOWED --><input type="submit" accesskey="k" tabindex="7" name="save" value="{L_SAVE_DRAFT}" class="button2" />&nbsp; <!-- ENDIF -->
         <input type="submit" tabindex="5" name="preview" value="{L_PREVIEW}" class="button1"<!-- IF not S_PRIVMSGS --> onclick="document.getElementById('postform').action += '#preview';"<!-- ENDIF --> />&nbsp;
         <input type="submit" accesskey="s" tabindex="6" name="post" value="{L_SUBMIT}" class="button1 default-submit-action" />&nbsp;

      </fieldset>

      <span class="corners-bottom"><span></span></span></div>
   </div>
   <!-- ENDIF -->

   <!-- IF not S_PRIVMSGS and not S_SHOW_DRAFTS and not $SIG_EDIT eq 1 -->
      <div id="tabs">
         <ul>
            <li id="options-panel-tab" class="activetab"><a href="#tabs" onclick="subPanels('options-panel'); return false;"><span>{L_OPTIONS}</span></a></li>
            <!-- IF S_SHOW_ATTACH_BOX --><li id="attach-panel-tab"><a href="#tabs" onclick="subPanels('attach-panel'); return false;"><span>{L_ADD_ATTACHMENT}</span></a></li><!-- ENDIF -->
            <!-- IF S_SHOW_POLL_BOX || S_POLL_DELETE --><li id="poll-panel-tab"><a href="#tabs" onclick="subPanels('poll-panel'); return false;"><span>{L_ADD_POLL}</span></a></li><!-- ENDIF -->
         </ul>
      </div>
   <!-- ENDIF -->

   <!-- IF not S_SHOW_DRAFTS and not $SIG_EDIT eq 1 -->
   <div class="panel bg3" id="options-panel">
      <div class="inner"><span class="corners-top"><span></span></span>

      <fieldset class="fields1">
         <!-- IF S_BBCODE_ALLOWED -->
            <div><label for="disable_bbcode"><input type="checkbox" name="disable_bbcode" id="disable_bbcode"{S_BBCODE_CHECKED} /> {L_DISABLE_BBCODE}</label></div>
         <!-- ENDIF -->
         <!-- IF S_SMILIES_ALLOWED -->
            <div><label for="disable_smilies"><input type="checkbox" name="disable_smilies" id="disable_smilies"{S_SMILIES_CHECKED} /> {L_DISABLE_SMILIES}</label></div>
         <!-- ENDIF -->
         <!-- IF S_LINKS_ALLOWED -->
            <div><label for="disable_magic_url"><input type="checkbox" name="disable_magic_url" id="disable_magic_url"{S_MAGIC_URL_CHECKED} /> {L_DISABLE_MAGIC_URL}</label></div>
         <!-- ENDIF -->
         <!-- IF S_SIG_ALLOWED -->
            <div><label for="attach_sig"><input type="checkbox" name="attach_sig" id="attach_sig"{S_SIGNATURE_CHECKED} /> {L_ATTACH_SIG}</label></div>
         <!-- ENDIF -->
         <!-- IF S_NOTIFY_ALLOWED -->
            <div><label for="notify"><input type="checkbox" name="notify" id="notify"{S_NOTIFY_CHECKED} /> {L_NOTIFY_REPLY}</label></div>
         <!-- ENDIF -->
         <!-- IF S_LOCK_TOPIC_ALLOWED -->
            <div><label for="lock_topic"><input type="checkbox" name="lock_topic" id="lock_topic"{S_LOCK_TOPIC_CHECKED} /> {L_LOCK_TOPIC}</label></div>
         <!-- ENDIF -->
         <!-- IF S_LOCK_POST_ALLOWED -->
            <div><label for="lock_post"><input type="checkbox" name="lock_post" id="lock_post"{S_LOCK_POST_CHECKED} /> {L_LOCK_POST} [{L_LOCK_POST_EXPLAIN}]</label></div>
         <!-- ENDIF -->

         <!-- IF S_TYPE_TOGGLE or S_TOPIC_TYPE_ANNOUNCE or S_TOPIC_TYPE_STICKY -->
         <hr class="dashed" />
         <!-- ENDIF -->

         <!-- IF S_TYPE_TOGGLE -->
         <dl>
            <dt><label for="topic_type-0"><!-- IF S_EDIT_POST -->{L_CHANGE_TOPIC_TO}<!-- ELSE -->{L_POST_TOPIC_AS}<!-- ENDIF -->:</label></dt>
            <dd><!-- BEGIN topic_type --><label for="topic_type-{topic_type.VALUE}"><input type="radio" name="topic_type" id="topic_type-{topic_type.VALUE}" value="{topic_type.VALUE}"{topic_type.S_CHECKED} />{topic_type.L_TOPIC_TYPE}</label> <!-- END topic_type --></dd>
         </dl>
         <!-- ENDIF -->

         <!-- IF S_TOPIC_TYPE_ANNOUNCE or S_TOPIC_TYPE_STICKY -->
         <dl>
            <dt><label for="topic_time_limit">{L_STICK_TOPIC_FOR}:</label></dt>
            <dd><label for="topic_time_limit"><input type="text" name="topic_time_limit" id="topic_time_limit" size="3" maxlength="3" value="{TOPIC_TIME_LIMIT}" class="inputbox autowidth" /> {L_DAYS}</label></dd>
            <dd>{L_STICK_TOPIC_FOR_EXPLAIN}</dd>
         </dl>
         <!-- ENDIF -->

         <!-- IF S_EDIT_REASON -->
         <dl>
            <dt><label for="edit_reason">{L_EDIT_REASON}:</label></dt>
            <dd><input type="text" name="edit_reason" id="edit_reason" value="{EDIT_REASON}" class="inputbox" /></dd>
         </dl>
         <!-- ENDIF -->
      </fieldset>
      <!-- ENDIF -->

<!-- ENDIF -->

 


Сообщение добавлено... спустя 1 минуту 32 секунды:
posting.php
<?php
/**
*
* @package phpBB3
* @version $Id$
* @copyright (c) 2005 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
* @ignore
*/
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
include($phpbb_root_path . 'includes/message_parser.' . $phpEx);


// Start session management
$user->session_begin();
$auth->acl($user->data);


// Grab only parameters needed here
$post_id   = request_var('p', 0);
$topic_id   = request_var('t', 0);
$forum_id   = request_var('f', 0);
$draft_id   = request_var('d', 0);
$lastclick   = request_var('lastclick', 0);

$submit      = (isset($_POST['post'])) ? true : false;
$preview   = (isset($_POST['preview'])) ? true : false;
$save      = (isset($_POST['save'])) ? true : false;
$load      = (isset($_POST['load'])) ? true : false;
$delete      = (isset($_POST['delete'])) ? true : false;
$cancel      = (isset($_POST['cancel']) && !isset($_POST['save'])) ? true : false;

$refresh   = (isset($_POST['add_file']) || isset($_POST['delete_file']) || isset($_POST['full_editor']) || isset($_POST['cancel_unglobalise']) || $save || $load) ? true : false;
$mode      = ($delete && !$preview && !$refresh && $submit) ? 'delete' : request_var('mode', '');

$error = $post_data = array();
$current_time = time();

// Was cancel pressed? If so then redirect to the appropriate page
if ($cancel || ($current_time - $lastclick < 2 && $submit))
{
   $f = ($forum_id) ? 'f=' . $forum_id . '&amp;' : '';
   $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")));
   redirect($redirect);
}

if (in_array($mode, array('post', 'reply', 'quote', 'edit', 'delete')) && !$forum_id)
{
   trigger_error('NO_FORUM');
}

// We need to know some basic information in all cases before we do anything.
switch ($mode)
{
   case 'post':
      $sql = 'SELECT *
         FROM ' . FORUMS_TABLE . "
         WHERE forum_id = $forum_id";
   break;

   case 'bump':
   case 'reply':
      if (!$topic_id)
      {
         trigger_error('NO_TOPIC');
      }

      // Force forum id
      $sql = 'SELECT forum_id
         FROM ' . TOPICS_TABLE . '
         WHERE topic_id = ' . $topic_id;
      $result = $db->sql_query($sql);
      $f_id = (int) $db->sql_fetchfield('forum_id');
      $db->sql_freeresult($result);

      $forum_id = (!$f_id) ? $forum_id : $f_id;

      $sql = 'SELECT f.*, t.*
         FROM ' . TOPICS_TABLE . ' t, ' . FORUMS_TABLE . " f
         WHERE t.topic_id = $topic_id
            AND (f.forum_id = t.forum_id
               OR f.forum_id = $forum_id)" .
         (($auth->acl_get('m_approve', $forum_id)) ? '' : 'AND t.topic_approved = 1');
   break;

   case 'quote':
   case 'edit':
   case 'delete':
      if (!$post_id)
      {
         $user->setup('posting');
         trigger_error('NO_POST');
      }

      // Force forum id
      $sql = 'SELECT forum_id
         FROM ' . POSTS_TABLE . '
         WHERE post_id = ' . $post_id;
      $result = $db->sql_query($sql);
      $f_id = (int) $db->sql_fetchfield('forum_id');
      $db->sql_freeresult($result);

      $forum_id = (!$f_id) ? $forum_id : $f_id;

      $sql = 'SELECT f.*, t.*, p.*, u.username, u.username_clean, u.user_sig, u.user_sig_bbcode_uid, u.user_sig_bbcode_bitfield
         FROM ' . POSTS_TABLE . ' p, ' . TOPICS_TABLE . ' t, ' . FORUMS_TABLE . ' f, ' . USERS_TABLE . " u
         WHERE p.post_id = $post_id
            AND t.topic_id = p.topic_id
            AND u.user_id = p.poster_id
            AND (f.forum_id = t.forum_id
               OR f.forum_id = $forum_id)" .
            (($auth->acl_get('m_approve', $forum_id)) ? '' : 'AND p.post_approved = 1');
   break;

   case 'smilies':
      $sql = '';
            if ( request_var('announce', 0) == ACP_ANNOUNCE_TRUE )
      {
         generate_smilies('window', 0, ACP_ANNOUNCE_TRUE);
      }
      else
      {
         generate_smilies('window', $forum_id);
      }
   break;

   case 'popup':
      if ($forum_id)
      {
         $sql = 'SELECT forum_style
            FROM ' . FORUMS_TABLE . '
            WHERE forum_id = ' . $forum_id;
      }
      else
      {
         upload_popup();
         return;
      }
   break;

   default:
      $sql = '';
   break;
}

if (!$sql)
{
   $user->setup('posting');
   trigger_error('NO_POST_MODE');
}

$result = $db->sql_query($sql);
$post_data = $db->sql_fetchrow($result);
$db->sql_freeresult($result);

if (!$post_data)
{
   if (!($mode == 'post' || $mode == 'bump' || $mode == 'reply'))
   {
      $user->setup('posting');
   }
   trigger_error(($mode == 'post' || $mode == 'bump' || $mode == 'reply') ? 'NO_TOPIC' : 'NO_POST');
}

// Not able to reply to unapproved posts/topics
// TODO: add more descriptive language key
if ($auth->acl_get('m_approve', $forum_id) && ((($mode == 'reply' || $mode == 'bump') && !$post_data['topic_approved']) || ($mode == 'quote' && !$post_data['post_approved'])))
{
   trigger_error(($mode == 'reply' || $mode == 'bump') ? 'TOPIC_UNAPPROVED' : 'POST_UNAPPROVED');
}

if ($mode == 'popup')
{
   upload_popup($post_data['forum_style']);
   return;
}

$user->setup(array('posting', 'mcp', 'viewtopic'), $post_data['forum_style']);

if ($config['enable_post_confirm'] && !$user->data['is_registered'])
{
   include($phpbb_root_path . 'includes/captcha/captcha_factory.' . $phpEx);
   $captcha =& phpbb_captcha_factory::get_instance($config['captcha_plugin']);
   $captcha->init(CONFIRM_POST);
}

// Use post_row values in favor of submitted ones...
$forum_id   = (!empty($post_data['forum_id'])) ? (int) $post_data['forum_id'] : (int) $forum_id;
$topic_id   = (!empty($post_data['topic_id'])) ? (int) $post_data['topic_id'] : (int) $topic_id;
$post_id   = (!empty($post_data['post_id'])) ? (int) $post_data['post_id'] : (int) $post_id;

// Need to login to passworded forum first?
if ($post_data['forum_password'])
{
   login_forum_box(array(
      'forum_id'         => $forum_id,
      'forum_password'   => $post_data['forum_password'])
   );
}

// Check permissions
if ($user->data['is_bot'])
{
   redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
}

// Is the user able to read within this forum?
if (!$auth->acl_get('f_read', $forum_id))
{
   if ($user->data['user_id'] != ANONYMOUS)
   {
      trigger_error('USER_CANNOT_READ');
   }

   login_box('', $user->lang['LOGIN_EXPLAIN_POST']);
}

// Permission to do the action asked?
$is_authed = false;

switch ($mode)
{
   case 'post':
      if ($auth->acl_get('f_post', $forum_id))
      {
         $is_authed = true;
      }
   break;

   case 'bump':
      if ($auth->acl_get('f_bump', $forum_id))
      {
         $is_authed = true;
      }
   break;

   case 'quote':

      $post_data['post_edit_locked'] = 0;

   // no break;

   case 'reply':
      if ($auth->acl_get('f_reply', $forum_id))
      {
         $is_authed = true;
      }
   break;

   case 'edit':
      if ($user->data['is_registered'] && $auth->acl_gets('f_edit', 'm_edit', $forum_id))
      {
         $is_authed = true;
      }
   break;

   case 'delete':
      if ($user->data['is_registered'] && $auth->acl_gets('f_delete', 'm_delete', $forum_id))
      {
         $is_authed = true;
      }
   break;
}

if (!$is_authed)
{
   $check_auth = ($mode == 'quote') ? 'reply' : $mode;

   if ($user->data['is_registered'])
   {
      trigger_error('USER_CANNOT_' . strtoupper($check_auth));
   }

   login_box('', $user->lang['LOGIN_EXPLAIN_' . strtoupper($mode)]);
}

// Is the user able to post within this forum?
if ($post_data['forum_type'] != FORUM_POST && in_array($mode, array('post', 'bump', 'quote', 'reply')))
{
   trigger_error('USER_CANNOT_FORUM_POST');
}

// Forum/Topic locked?
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))
{
   trigger_error(($post_data['forum_status'] == ITEM_LOCKED) ? 'FORUM_LOCKED' : 'TOPIC_LOCKED');
}

// Can we edit this post ... if we're a moderator with rights then always yes
// else it depends on editing times, lock status and if we're the correct user
if ($mode == 'edit' && !$auth->acl_get('m_edit', $forum_id))
{
   if ($user->data['user_id'] != $post_data['poster_id'])
   {
      trigger_error('USER_CANNOT_EDIT');
   }

   if (!($post_data['post_time'] > time() - ($config['edit_time'] * 60) || !$config['edit_time']))
   {
      trigger_error('CANNOT_EDIT_TIME');
   }

   if ($post_data['post_edit_locked'])
   {
      trigger_error('CANNOT_EDIT_POST_LOCKED');
   }
}

// Handle delete mode...
if ($mode == 'delete')
{
   handle_post_delete($forum_id, $topic_id, $post_id, $post_data);
   return;
}

// Handle bump mode...
if ($mode == 'bump')
{
   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'])
      && check_link_hash(request_var('hash', ''), "topic_{$post_data['topic_id']}"))
   {
      $meta_url = phpbb_bump_topic($forum_id, $topic_id, $post_data, $current_time);
      meta_refresh(3, $meta_url);

      $message = $user->lang['TOPIC_BUMPED'] . '<br /><br />' . sprintf($user->lang['VIEW_MESSAGE'], '<a href="' . $meta_url . '">', '</a>');
      $message .= '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id) . '">', '</a>');

      trigger_error($message);
   }

   trigger_error('BUMP_ERROR');
}

// Subject length limiting to 60 characters if first post...
if ($mode == 'post' || ($mode == 'edit' && $post_data['topic_first_post_id'] == $post_data['post_id']))
{
   $template->assign_var('S_NEW_MESSAGE', true);
}

// Determine some vars
if (isset($post_data['poster_id']) && $post_data['poster_id'] == ANONYMOUS)
{
   $post_data['quote_username'] = (!empty($post_data['post_username'])) ? $post_data['post_username'] : $user->lang['GUEST'];
}
else
{
   $post_data['quote_username'] = isset($post_data['username']) ? $post_data['username'] : '';
}

$post_data['post_edit_locked']   = (isset($post_data['post_edit_locked'])) ? (int) $post_data['post_edit_locked'] : 0;
$post_data['post_subject_md5']   = (isset($post_data['post_subject']) && $mode == 'edit') ? md5($post_data['post_subject']) : '';
$post_data['post_subject']      = (in_array($mode, array('quote', 'edit'))) ? $post_data['post_subject'] : ((isset($post_data['topic_title'])) ? $post_data['topic_title'] : '');
$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;
$post_data['poll_length']      = (!empty($post_data['poll_length'])) ? (int) $post_data['poll_length'] / 86400 : 0;
$post_data['poll_start']      = (!empty($post_data['poll_start'])) ? (int) $post_data['poll_start'] : 0;
$post_data['icon_id']         = (!isset($post_data['icon_id']) || in_array($mode, array('quote', 'reply'))) ? 0 : (int) $post_data['icon_id'];
$post_data['poll_options']      = array();

// Get Poll Data
if ($post_data['poll_start'])
{
   $sql = 'SELECT poll_option_text
      FROM ' . POLL_OPTIONS_TABLE . "
      WHERE topic_id = $topic_id
      ORDER BY poll_option_id";
   $result = $db->sql_query($sql);

   while ($row = $db->sql_fetchrow($result))
   {
      $post_data['poll_options'][] = trim($row['poll_option_text']);
   }
   $db->sql_freeresult($result);
}

if ($mode == 'edit')
{
   $original_poll_data = array(
      'poll_title'      => $post_data['poll_title'],
      'poll_length'      => $post_data['poll_length'],
      'poll_max_options'   => $post_data['poll_max_options'],
      'poll_option_text'   => implode("\n", $post_data['poll_options']),
      'poll_start'      => $post_data['poll_start'],
      'poll_last_vote'   => $post_data['poll_last_vote'],
      'poll_vote_change'   => $post_data['poll_vote_change'],
   );
}

$orig_poll_options_size = sizeof($post_data['poll_options']);

$message_parser = new parse_message();

if (isset($post_data['post_text']))
{
   $message_parser->message = &$post_data['post_text'];
   unset($post_data['post_text']);
}

// Set some default variables
$uninit = array('post_attachment' => 0, 'poster_id' => $user->data['user_id'], 'enable_magic_url' => 0, 'topic_status' => 0, 'topic_type' => POST_NORMAL, 'post_subject' => '',  'seo_desc' => '','seo_key' => '', 'seo_post_key' =>'', 'topic_seo_title' =>'', 'topic_title' => '', 'post_time' => 0, 'post_edit_reason' => '', 'notify_set' => 0);

foreach ($uninit as $var_name => $default_value)
{
   if (!isset($post_data[$var_name]))
   {
      $post_data[$var_name] = $default_value;
   }
}
unset($uninit);

// Always check if the submitted attachment data is valid and belongs to the user.
// Further down (especially in submit_post()) we do not check this again.
$message_parser->get_submitted_attachment_data($post_data['poster_id']);

if ($post_data['post_attachment'] && !$submit && !$refresh && !$preview && $mode == 'edit')
{
   // Do not change to SELECT *
   $sql = 'SELECT attach_id, is_orphan, attach_comment, real_filename
      FROM ' . ATTACHMENTS_TABLE . "
      WHERE post_msg_id = $post_id
         AND in_message = 0
         AND is_orphan = 0
      ORDER BY filetime DESC";
   $result = $db->sql_query($sql);
   $message_parser->attachment_data = array_merge($message_parser->attachment_data, $db->sql_fetchrowset($result));
   $db->sql_freeresult($result);
}

if ($post_data['poster_id'] == ANONYMOUS)
{
   $post_data['username'] = ($mode == 'quote' || $mode == 'edit') ? trim($post_data['post_username']) : '';
}
else
{
   $post_data['username'] = ($mode == 'quote' || $mode == 'edit') ? trim($post_data['username']) : '';
}

$post_data['enable_urls'] = $post_data['enable_magic_url'];

if ($mode != 'edit')
{
   $post_data['enable_sig']      = ($config['allow_sig'] && $user->optionget('attachsig')) ? true: false;
   $post_data['enable_smilies']   = ($config['allow_smilies'] && $user->optionget('smilies')) ? true : false;
   $post_data['enable_bbcode']      = ($config['allow_bbcode'] && $user->optionget('bbcode')) ? true : false;
   $post_data['enable_urls']      = true;
}

$post_data['enable_magic_url'] = $post_data['drafts'] = false;

// User own some drafts?
if ($user->data['is_registered'] && $auth->acl_get('u_savedrafts') && ($mode == 'reply' || $mode == 'post' || $mode == 'quote'))
{
   $sql = 'SELECT draft_id
      FROM ' . DRAFTS_TABLE . '
      WHERE user_id = ' . $user->data['user_id'] .
         (($forum_id) ? ' AND forum_id = ' . (int) $forum_id : '') .
         (($topic_id) ? ' AND topic_id = ' . (int) $topic_id : '') .
         (($draft_id) ? " AND draft_id <> $draft_id" : '');
   $result = $db->sql_query_limit($sql, 1);

   if ($db->sql_fetchrow($result))
   {
      $post_data['drafts'] = true;
   }
   $db->sql_freeresult($result);
}

$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);

// Check if user is watching this topic
if ($mode != 'post' && $config['allow_topic_notify'] && $user->data['is_registered'])
{
   $sql = 'SELECT topic_id
      FROM ' . TOPICS_WATCH_TABLE . '
      WHERE topic_id = ' . $topic_id . '
         AND user_id = ' . $user->data['user_id'];
   $result = $db->sql_query($sql);
   $post_data['notify_set'] = (int) $db->sql_fetchfield('topic_id');
   $db->sql_freeresult($result);
}

// Do we want to edit our post ?
if ($mode == 'edit' && $post_data['bbcode_uid'])
{
   $message_parser->bbcode_uid = $post_data['bbcode_uid'];
}

// HTML, BBCode, Smilies, Images and Flash status
$bbcode_status   = ($config['allow_bbcode'] && $auth->acl_get('f_bbcode', $forum_id)) ? true : false;
$smilies_status   = ($config['allow_smilies'] && $auth->acl_get('f_smilies', $forum_id)) ? true : false;
$img_status      = ($bbcode_status && $auth->acl_get('f_img', $forum_id)) ? true : false;
$url_status      = ($config['allow_post_links']) ? true : false;
$flash_status   = ($bbcode_status && $auth->acl_get('f_flash', $forum_id) && $config['allow_post_flash']) ? true : false;
$quote_status   = true;

// Save Draft
if ($save && $user->data['is_registered'] && $auth->acl_get('u_savedrafts') && ($mode == 'reply' || $mode == 'post' || $mode == 'quote'))
{
   $subject = utf8_normalize_nfc(request_var('subject', '', true));
   $subject = (!$subject && $mode != 'post') ? $post_data['topic_title'] : $subject;
   $message = utf8_normalize_nfc(request_var('message', '', true));

   if ($subject && $message)
   {
      if (confirm_box(true))
      {
         $sql = 'INSERT INTO ' . DRAFTS_TABLE . ' ' . $db->sql_build_array('INSERT', array(
            'user_id'      => (int) $user->data['user_id'],
            'topic_id'      => (int) $topic_id,
            'forum_id'      => (int) $forum_id,
            'save_time'      => (int) $current_time,
            'draft_subject'   => (string) $subject,
            'draft_message'   => (string) $message)
         );
         $db->sql_query($sql);

         $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");

         meta_refresh(3, $meta_info);

         $message = $user->lang['DRAFT_SAVED'] . '<br /><br />';
         $message .= ($mode != 'post') ? sprintf($user->lang['RETURN_TOPIC'], '<a href="' . $meta_info . '">', '</a>') . '<br /><br />' : '';
         $message .= sprintf($user->lang['RETURN_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id) . '">', '</a>');

         trigger_error($message);
      }
      else
      {
         $s_hidden_fields = build_hidden_fields(array(
            'mode'      => $mode,
            'save'      => true,
            'f'         => $forum_id,
            't'         => $topic_id,
            'subject'   => $subject,
            'message'   => $message,
            'attachment_data' => $message_parser->attachment_data,
            )
         );

         $hidden_fields = array(
            'icon_id'         => 0,

            'disable_bbcode'   => false,
            'disable_smilies'   => false,
            'disable_magic_url'   => false,
            'attach_sig'      => true,
            'lock_topic'      => false,

            'topic_type'      => POST_NORMAL,
            'topic_time_limit'   => 0,

            'poll_title'      => '',
            'poll_option_text'   => '',
            'poll_max_options'   => 1,
            'poll_length'      => 0,
            'poll_vote_change'   => false,
         );

         foreach ($hidden_fields as $name => $default)
         {
            if (!isset($_POST[$name]))
            {
               // Don't include it, if its not available
               unset($hidden_fields[$name]);
               continue;
            }

            if (is_bool($default))
            {
               // Use the string representation
               $hidden_fields[$name] = request_var($name, '');
            }
            else
            {
               $hidden_fields[$name] = request_var($name, $default);
            }
         }

         $s_hidden_fields .= build_hidden_fields($hidden_fields);

         confirm_box(false, 'SAVE_DRAFT', $s_hidden_fields);
      }
   }
   else
   {
      if (utf8_clean_string($subject) === '')
      {
         $error[] = $user->lang['EMPTY_SUBJECT'];
      }

      if (utf8_clean_string($message) === '')
      {
         $error[] = $user->lang['TOO_FEW_CHARS'];
      }
   }
   unset($subject, $message);
}

// Load requested Draft
if ($draft_id && ($mode == 'reply' || $mode == 'quote' || $mode == 'post') && $user->data['is_registered'] && $auth->acl_get('u_savedrafts'))
{
   $sql = 'SELECT draft_subject, draft_message
      FROM ' . DRAFTS_TABLE . "
      WHERE draft_id = $draft_id
         AND user_id = " . $user->data['user_id'];
   $result = $db->sql_query_limit($sql, 1);
   $row = $db->sql_fetchrow($result);
   $db->sql_freeresult($result);

   if ($row)
   {
      $post_data['post_subject'] = $row['draft_subject'];
      $message_parser->message = $row['draft_message'];

      $template->assign_var('S_DRAFT_LOADED', true);
   }
   else
   {
      $draft_id = 0;
   }
}

// Load draft overview
if ($load && ($mode == 'reply' || $mode == 'quote' || $mode == 'post') && $post_data['drafts'])
{
   load_drafts($topic_id, $forum_id);
}


if ($submit || $preview || $refresh)
{
   $post_data['topic_cur_post_id']   = request_var('topic_cur_post_id', 0);
   $post_data['post_subject']      = utf8_normalize_nfc(request_var('subject', '', true));
   $message_parser->message      = utf8_normalize_nfc(request_var('message', '', true));

   $post_data['username']         = utf8_normalize_nfc(request_var('username', $post_data['username'], true));
   $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)) : '';

   $post_data['orig_topic_type']   = $post_data['topic_type'];
   $post_data['seo_desc']          = utf8_normalize_nfc(request_var('seo_desc', '', true));       
    $post_data['seo_key']           = utf8_normalize_nfc(request_var('seo_key', '', true));
   $post_data['seo_post_key']      = utf8_normalize_nfc(request_var('seo_post_key', '', true));
   $post_data['topic_seo_title']   = utf8_normalize_nfc(request_var('topic_seo_title', '', true));   
   
   $post_data['topic_type']      = request_var('topic_type', (($mode != 'post') ? (int) $post_data['topic_type'] : POST_NORMAL));
   $post_data['topic_time_limit']   = request_var('topic_time_limit', (($mode != 'post') ? (int) $post_data['topic_time_limit'] : 0));

   if ($post_data['enable_icons'] && $auth->acl_get('f_icons', $forum_id))
   {
      $post_data['icon_id'] = request_var('icon', (int) $post_data['icon_id']);
   }

   $post_data['enable_bbcode']      = (!$bbcode_status || isset($_POST['disable_bbcode'])) ? false : true;
   $post_data['enable_smilies']   = (!$smilies_status || isset($_POST['disable_smilies'])) ? false : true;
   $post_data['enable_urls']      = (isset($_POST['disable_magic_url'])) ? 0 : 1;
   $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);

   if ($config['allow_topic_notify'] && $user->data['is_registered'])
   {
      $notify = (isset($_POST['notify'])) ? true : false;
   }
   else
   {
      $notify = false;
   }

   $topic_lock         = (isset($_POST['lock_topic'])) ? true : false;
   $post_lock         = (isset($_POST['lock_post'])) ? true : false;
   $poll_delete      = (isset($_POST['poll_delete'])) ? true : false;

   if ($submit)
   {
      $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);
      $status_switch = ($status_switch != $check_value);
   }
   else
   {
      $status_switch = 1;
   }

   // Delete Poll
   if ($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)))
   {
      if ($submit && check_form_key('posting'))
      {
         $sql = 'DELETE FROM ' . POLL_OPTIONS_TABLE . "
            WHERE topic_id = $topic_id";
         $db->sql_query($sql);

         $sql = 'DELETE FROM ' . POLL_VOTES_TABLE . "
            WHERE topic_id = $topic_id";
         $db->sql_query($sql);

         $topic_sql = array(
            'poll_title'      => '',
            'poll_start'       => 0,
            'poll_length'      => 0,
            'poll_last_vote'   => 0,
            'poll_max_options'   => 0,
            'poll_vote_change'   => 0
         );

         $sql = 'UPDATE ' . TOPICS_TABLE . '
            SET ' . $db->sql_build_array('UPDATE', $topic_sql) . "
            WHERE topic_id = $topic_id";
         $db->sql_query($sql);
      }

      $post_data['poll_title'] = $post_data['poll_option_text'] = '';
      $post_data['poll_vote_change'] = $post_data['poll_max_options'] = $post_data['poll_length'] = 0;
   }
   else
   {
      $post_data['poll_title']      = utf8_normalize_nfc(request_var('poll_title', '', true));
      $post_data['poll_length']      = request_var('poll_length', 0);
      $post_data['poll_option_text']   = utf8_normalize_nfc(request_var('poll_option_text', '', true));
      $post_data['poll_max_options']   = request_var('poll_max_options', 1);
      $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;
   }

   // If replying/quoting and last post id has changed
   // give user option to continue submit or return to post
   // notify and show user the post made between his request and the final submit
   if (($mode == 'reply' || $mode == 'quote') && $post_data['topic_cur_post_id'] && $post_data['topic_cur_post_id'] != $post_data['topic_last_post_id'])
   {
      // Only do so if it is allowed forum-wide
      if ($post_data['forum_flags'] & FORUM_FLAG_POST_REVIEW)
      {
         if (topic_review($topic_id, $forum_id, 'post_review', $post_data['topic_cur_post_id']))
         {
            $template->assign_var('S_POST_REVIEW', true);
         }

         $submit = false;
         $refresh = true;
      }
   }

   // Parse Attachments - before checksum is calculated
   $message_parser->parse_attachments('fileupload', $mode, $forum_id, $submit, $preview, $refresh);

   // Grab md5 'checksum' of new message
   $message_md5 = md5($message_parser->message);

   // If editing and checksum has changed we know the post was edited while we're editing
   // Notify and show user the changed post
   if ($mode == 'edit' && $post_data['forum_flags'] & FORUM_FLAG_POST_REVIEW)
   {
      $edit_post_message_checksum = request_var('edit_post_message_checksum', '');
      $edit_post_subject_checksum = request_var('edit_post_subject_checksum', '');

      // $post_data['post_checksum'] is the checksum of the post submitted in the meantime
      // $message_md5 is the checksum of the post we're about to submit
      // $edit_post_message_checksum is the checksum of the post we're editing
      // ...

      // We make sure nobody else made exactly the same change
      // we're about to submit by also checking $message_md5 != $post_data['post_checksum']
      if (($edit_post_message_checksum !== '' && $edit_post_message_checksum != $post_data['post_checksum'] && $message_md5 != $post_data['post_checksum'])
       || ($edit_post_subject_checksum !== '' && $edit_post_subject_checksum != $post_data['post_subject_md5'] && md5($post_data['post_subject']) != $post_data['post_subject_md5']))
      {
         if (topic_review($topic_id, $forum_id, 'post_review_edit', $post_id))
         {
            $template->assign_vars(array(
               'S_POST_REVIEW'         => true,

               'L_POST_REVIEW'         => $user->lang['POST_REVIEW_EDIT'],
               'L_POST_REVIEW_EXPLAIN'   => $user->lang['POST_REVIEW_EDIT_EXPLAIN'],
            ));
         }

         $submit = false;
         $refresh = true;
      }
   }

   // Check checksum ... don't re-parse message if the same
   $update_message = ($mode != 'edit' || $message_md5 != $post_data['post_checksum'] || $status_switch || strlen($post_data['bbcode_uid']) < BBCODE_UID_LEN) ? true : false;

   // Also check if subject got updated...
   $update_subject = $mode != 'edit' || ($post_data['post_subject_md5'] && $post_data['post_subject_md5'] != md5($post_data['post_subject']));

   // Parse message
   if ($update_message)
   {
      if (sizeof($message_parser->warn_msg))
      {
         $error[] = implode('<br />', $message_parser->warn_msg);
         $message_parser->warn_msg = array();
      }

      $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']);

      // On a refresh we do not care about message parsing errors
      if (sizeof($message_parser->warn_msg) && $refresh)
      {
         $message_parser->warn_msg = array();
      }
   }
   else
   {
      $message_parser->bbcode_bitfield = $post_data['bbcode_bitfield'];
   }

   if ($mode != 'edit' && !$preview && !$refresh && $config['flood_interval'] && !$auth->acl_get('f_ignoreflood', $forum_id))
   {
      // Flood check
      $last_post_time = 0;

      if ($user->data['is_registered'])
      {
         $last_post_time = $user->data['user_lastpost_time'];
      }
      else
      {
         $sql = 'SELECT post_time AS last_post_time
            FROM ' . POSTS_TABLE . "
            WHERE poster_ip = '" . $user->ip . "'
               AND post_time > " . ($current_time - $config['flood_interval']);
         $result = $db->sql_query_limit($sql, 1);
         if ($row = $db->sql_fetchrow($result))
         {
            $last_post_time = $row['last_post_time'];
         }
         $db->sql_freeresult($result);
      }

      if ($last_post_time && ($current_time - $last_post_time) < intval($config['flood_interval']))
      {
         $error[] = $user->lang['FLOOD_ERROR'];
      }
   }

   // Validate username
   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']))
   {
      include($phpbb_root_path . 'includes/functions_user.' . $phpEx);

      $user->add_lang('ucp');

      if (($result = validate_username($post_data['username'], (!empty($post_data['post_username'])) ? $post_data['post_username'] : '')) !== false)
      {
         $error[] = $user->lang[$result . '_USERNAME'];
      }

      if (($result = validate_string($post_data['username'], false, $config['min_name_chars'], $config['max_name_chars'])) !== false)
      {
         $min_max_amount = ($result == 'TOO_SHORT') ? $config['min_name_chars'] : $config['max_name_chars'];
         $error[] = sprintf($user->lang['FIELD_' . $result], $user->lang['USERNAME'], $min_max_amount);
      }
   }

   if ($config['enable_post_confirm'] && !$user->data['is_registered'] && in_array($mode, array('quote', 'post', 'reply')))
   {
      $captcha_data = array(
         'message'   => utf8_normalize_nfc(request_var('message', '', true)),
         'subject'   => utf8_normalize_nfc(request_var('subject', '', true)),
         'username'   => utf8_normalize_nfc(request_var('username', '', true)),
      );
      $vc_response = $captcha->validate($captcha_data);
      if ($vc_response)
      {
         $error[] = $vc_response;
      }
   }

   // check form
   if (($submit || $preview) && !check_form_key('posting'))
   {
      $error[] = $user->lang['FORM_INVALID'];
   }

   // Parse subject
   if (!$preview && !$refresh && utf8_clean_string($post_data['post_subject']) === '' && ($mode == 'post' || ($mode == 'edit' && $post_data['topic_first_post_id'] == $post_id)))
   {
      $error[] = $user->lang['EMPTY_SUBJECT'];
   }

   $post_data['poll_last_vote'] = (isset($post_data['poll_last_vote'])) ? $post_data['poll_last_vote'] : 0;

   if ($post_data['poll_option_text'] &&
      ($mode == 'post' || ($mode == 'edit' && $post_id == $post_data['topic_first_post_id']/* && (!$post_data['poll_last_vote'] || $auth->acl_get('m_edit', $forum_id))*/))
      && $auth->acl_get('f_poll', $forum_id))
   {
      $poll = array(
         'poll_title'      => $post_data['poll_title'],
         'poll_length'      => $post_data['poll_length'],
         'poll_max_options'   => $post_data['poll_max_options'],
         'poll_option_text'   => $post_data['poll_option_text'],
         'poll_start'      => $post_data['poll_start'],
         'poll_last_vote'   => $post_data['poll_last_vote'],
         'poll_vote_change'   => $post_data['poll_vote_change'],
         'enable_bbcode'      => $post_data['enable_bbcode'],
         'enable_urls'      => $post_data['enable_urls'],
         'enable_smilies'   => $post_data['enable_smilies'],
         'img_status'      => $img_status
      );

      $message_parser->parse_poll($poll);

      $post_data['poll_options'] = (isset($poll['poll_options'])) ? $poll['poll_options'] : array();
      $post_data['poll_title'] = (isset($poll['poll_title'])) ? $poll['poll_title'] : '';

      /* We reset votes, therefore also allow removing options
      if ($post_data['poll_last_vote'] && ($poll['poll_options_size'] < $orig_poll_options_size))
      {
         $message_parser->warn_msg[] = $user->lang['NO_DELETE_POLL_OPTIONS'];
      }*/
   }
   else if ($mode == 'edit' && $post_id == $post_data['topic_first_post_id'] && $auth->acl_get('f_poll', $forum_id))
   {
      // The user removed all poll options, this is equal to deleting the poll.
      $poll = array(
         'poll_title'      => '',
         'poll_length'      => 0,
         'poll_max_options'   => 0,
         'poll_option_text'   => '',
         'poll_start'      => 0,
         'poll_last_vote'   => 0,
         'poll_vote_change'   => 0,
         'poll_options'      => array(),
      );

      $post_data['poll_options'] = array();
      $post_data['poll_title'] = '';
      $post_data['poll_start'] = $post_data['poll_length'] = $post_data['poll_max_options'] = $post_data['poll_last_vote'] = $post_data['poll_vote_change'] = 0;
   }
   else if (!$auth->acl_get('f_poll', $forum_id) && ($mode == 'edit') && ($post_id == $post_data['topic_first_post_id']) && ($original_poll_data['poll_title'] != ''))
   {
      // We have a poll but the editing user is not permitted to create/edit it.
      // So we just keep the original poll-data.
      $poll = array_merge($original_poll_data, array(
         'enable_bbcode'      => $post_data['enable_bbcode'],
         'enable_urls'      => $post_data['enable_urls'],
         'enable_smilies'   => $post_data['enable_smilies'],
         'img_status'      => $img_status,
      ));

      $message_parser->parse_poll($poll);

      $post_data['poll_options'] = (isset($poll['poll_options'])) ? $poll['poll_options'] : array();
      $post_data['poll_title'] = (isset($poll['poll_title'])) ? $poll['poll_title'] : '';
   }
   else
   {
      $poll = array();
   }

   // Check topic type
   if ($post_data['topic_type'] != POST_NORMAL && ($mode == 'post' || ($mode == 'edit' && $post_data['topic_first_post_id'] == $post_id)))
   {
      switch ($post_data['topic_type'])
      {
         case POST_GLOBAL:
         case POST_ANNOUNCE:
            $auth_option = 'f_announce';
         break;

         case POST_STICKY:
            $auth_option = 'f_sticky';
         break;

         default:
            $auth_option = '';
         break;
      }

      if (!$auth->acl_get($auth_option, $forum_id))
      {
         // There is a special case where a user edits his post whereby the topic type got changed by an admin/mod.
         // Another case would be a mod not having sticky permissions for example but edit permissions.
         if ($mode == 'edit')
         {
            // To prevent non-authed users messing around with the topic type we reset it to the original one.
            $post_data['topic_type'] = $post_data['orig_topic_type'];
         }
         else
         {
            $error[] = $user->lang['CANNOT_POST_' . str_replace('F_', '', strtoupper($auth_option))];
         }
      }
   }

   if (sizeof($message_parser->warn_msg))
   {
      $error[] = implode('<br />', $message_parser->warn_msg);
   }

   // DNSBL check
   if ($config['check_dnsbl'] && !$refresh)
   {
      if (($dnsbl = $user->check_dnsbl('post')) !== false)
      {
         $error[] = sprintf($user->lang['IP_BLACKLISTED'], $user->ip, $dnsbl[1]);
      }
   }
 


Сообщение добавлено... спустя 29 секунд:
продолжение
// Store message, sync counters
   if (!sizeof($error) && $submit)
   {
      // Check if we want to de-globalize the topic... and ask for new forum
      if ($post_data['topic_type'] != POST_GLOBAL)
      {
         $sql = 'SELECT topic_type, forum_id
            FROM ' . TOPICS_TABLE . "
            WHERE topic_id = $topic_id";
         $result = $db->sql_query($sql);
         $row = $db->sql_fetchrow($result);
         $db->sql_freeresult($result);

         if ($row && !$row['forum_id'] && $row['topic_type'] == POST_GLOBAL)
         {
            $to_forum_id = request_var('to_forum_id', 0);

            if ($to_forum_id)
            {
               $sql = 'SELECT forum_type
                  FROM ' . FORUMS_TABLE . '
                  WHERE forum_id = ' . $to_forum_id;
               $result = $db->sql_query($sql);
               $forum_type = (int) $db->sql_fetchfield('forum_type');
               $db->sql_freeresult($result);

               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)))
               {
                  $to_forum_id = 0;
               }
            }

            if (!$to_forum_id)
            {
               include_once($phpbb_root_path . 'includes/functions_admin.' . $phpEx);

               $template->assign_vars(array(
                  'S_FORUM_SELECT'   => make_forum_select(false, false, false, true, true, true),
                  'S_UNGLOBALISE'      => true)
               );

               $submit = false;
               $refresh = true;
            }
            else
            {
               if (!$auth->acl_get('f_post', $to_forum_id))
               {
                  // This will only be triggered if the user tried to trick the forum.
                  trigger_error('NOT_AUTHORISED');
               }

               $forum_id = $to_forum_id;
            }
         }
      }

      if ($submit)
      {
         // Lock/Unlock Topic
         $change_topic_status = $post_data['topic_status'];
         $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;

         if ($post_data['topic_status'] == ITEM_LOCKED && !$topic_lock && $perm_lock_unlock)
         {
            $change_topic_status = ITEM_UNLOCKED;
         }
         else if ($post_data['topic_status'] == ITEM_UNLOCKED && $topic_lock && $perm_lock_unlock)
         {
            $change_topic_status = ITEM_LOCKED;
         }

         if ($change_topic_status != $post_data['topic_status'])
         {
            $sql = 'UPDATE ' . TOPICS_TABLE . "
               SET topic_status = $change_topic_status
               WHERE topic_id = $topic_id
                  AND topic_moved_id = 0";
            $db->sql_query($sql);

            $user_lock = ($auth->acl_get('f_user_lock', $forum_id) && $user->data['is_registered'] && $user->data['user_id'] == $post_data['topic_poster']) ? 'USER_' : '';

            add_log('mod', $forum_id, $topic_id, 'LOG_' . $user_lock . (($change_topic_status == ITEM_LOCKED) ? 'LOCK' : 'UNLOCK'), $post_data['topic_title']);
         }

         // Lock/Unlock Post Edit
         if ($mode == 'edit' && $post_data['post_edit_locked'] == ITEM_LOCKED && !$post_lock && $auth->acl_get('m_edit', $forum_id))
         {
            $post_data['post_edit_locked'] = ITEM_UNLOCKED;
         }
         else if ($mode == 'edit' && $post_data['post_edit_locked'] == ITEM_UNLOCKED && $post_lock && $auth->acl_get('m_edit', $forum_id))
         {
            $post_data['post_edit_locked'] = ITEM_LOCKED;
         }

         $data = array(
            'topic_title'         => (empty($post_data['topic_title'])) ? $post_data['post_subject'] : $post_data['topic_title'],
            'topic_first_post_id'   => (isset($post_data['topic_first_post_id'])) ? (int) $post_data['topic_first_post_id'] : 0,
            'topic_last_post_id'   => (isset($post_data['topic_last_post_id'])) ? (int) $post_data['topic_last_post_id'] : 0,
            'topic_time_limit'      => (int) $post_data['topic_time_limit'],
            'topic_attachment'      => (isset($post_data['topic_attachment'])) ? (int) $post_data['topic_attachment'] : 0,
            'post_id'            => (int) $post_id,
            'topic_id'            => (int) $topic_id,
            'forum_id'            => (int) $forum_id,
            'icon_id'            => (int) $post_data['icon_id'],
            'poster_id'            => (int) $post_data['poster_id'],
            'enable_sig'         => (bool) $post_data['enable_sig'],
            'enable_bbcode'         => (bool) $post_data['enable_bbcode'],
            'enable_smilies'      => (bool) $post_data['enable_smilies'],
            'enable_urls'         => (bool) $post_data['enable_urls'],
            'enable_indexing'      => (bool) $post_data['enable_indexing'],
            'message_md5'         => (string) $message_md5,
            'seo_desc'              => $post_data['seo_desc'],
                'seo_key'               => $post_data['seo_key'],
                'seo_post_key'          => $post_data['seo_post_key'],
            'topic_seo_title'       => $post_data['topic_seo_title'],
            'post_time'            => (isset($post_data['post_time'])) ? (int) $post_data['post_time'] : $current_time,
            'post_checksum'         => (isset($post_data['post_checksum'])) ? (string) $post_data['post_checksum'] : '',
            'post_edit_reason'      => $post_data['post_edit_reason'],
            'post_edit_user'      => ($mode == 'edit') ? $user->data['user_id'] : ((isset($post_data['post_edit_user'])) ? (int) $post_data['post_edit_user'] : 0),
            'forum_parents'         => $post_data['forum_parents'],
            'forum_name'         => $post_data['forum_name'],
            'notify'            => $notify,
            'notify_set'         => $post_data['notify_set'],
            'poster_ip'            => (isset($post_data['poster_ip'])) ? $post_data['poster_ip'] : $user->ip,
            'post_edit_locked'      => (int) $post_data['post_edit_locked'],
            'bbcode_bitfield'      => $message_parser->bbcode_bitfield,
            'bbcode_uid'         => $message_parser->bbcode_uid,
            'message'            => $message_parser->message,
            'attachment_data'      => $message_parser->attachment_data,
            'filename_data'         => $message_parser->filename_data,

            'topic_approved'      => (isset($post_data['topic_approved'])) ? $post_data['topic_approved'] : false,
            'post_approved'         => (isset($post_data['post_approved'])) ? $post_data['post_approved'] : false,
         );

         if ($mode == 'edit')
         {
            $data['topic_replies_real'] = $post_data['topic_replies_real'];
            $data['topic_replies'] = $post_data['topic_replies'];
         }

         // The last parameter tells submit_post if search indexer has to be run
         $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);

         if ($config['enable_post_confirm'] && !$user->data['is_registered'] && (isset($captcha) && $captcha->is_solved() === true) && ($mode == 'post' || $mode == 'reply' || $mode == 'quote'))
         {
            $captcha->reset();
         }

         // Check the permissions for post approval. Moderators are not affected.
         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']))
         {
            meta_refresh(10, $redirect_url);
            $message = ($mode == 'edit') ? $user->lang['POST_EDITED_MOD'] : $user->lang['POST_STORED_MOD'];
            $message .= (($user->data['user_id'] == ANONYMOUS) ? '' : ' '. $user->lang['POST_APPROVAL_NOTIFY']);
         }
         else
         {
            meta_refresh(3, $redirect_url);

            $message = ($mode == 'edit') ? 'POST_EDITED' : 'POST_STORED';
            $message = $user->lang[$message] . '<br /><br />' . sprintf($user->lang['VIEW_MESSAGE'], '<a href="' . $redirect_url . '">', '</a>');
         }

         $message .= '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $data['forum_id']) . '">', '</a>');
         trigger_error($message);
      }
   }
}

// Preview
if (!sizeof($error) && $preview)
{
   $post_data['post_time'] = ($mode == 'edit') ? $post_data['post_time'] : $current_time;

   $preview_message = $message_parser->format_display($post_data['enable_bbcode'], $post_data['enable_urls'], $post_data['enable_smilies'], false);

   $preview_signature = ($mode == 'edit') ? $post_data['user_sig'] : $user->data['user_sig'];
   $preview_signature_uid = ($mode == 'edit') ? $post_data['user_sig_bbcode_uid'] : $user->data['user_sig_bbcode_uid'];
   $preview_signature_bitfield = ($mode == 'edit') ? $post_data['user_sig_bbcode_bitfield'] : $user->data['user_sig_bbcode_bitfield'];

   // Signature
   if ($post_data['enable_sig'] && $config['allow_sig'] && $preview_signature && $auth->acl_get('f_sigs', $forum_id))
   {
      $parse_sig = new parse_message($preview_signature);
      $parse_sig->bbcode_uid = $preview_signature_uid;
      $parse_sig->bbcode_bitfield = $preview_signature_bitfield;

      // Not sure about parameters for bbcode/smilies/urls... in signatures
      $parse_sig->format_display($config['allow_sig_bbcode'], $config['allow_sig_links'], $config['allow_sig_smilies']);
      $preview_signature = $parse_sig->message;
      unset($parse_sig);
   }
   else
   {
      $preview_signature = '';
   }

   $preview_subject = censor_text($post_data['post_subject']);

   // Poll Preview
   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))*/))
   && $auth->acl_get('f_poll', $forum_id))
   {
      $parse_poll = new parse_message($post_data['poll_title']);
      $parse_poll->bbcode_uid = $message_parser->bbcode_uid;
      $parse_poll->bbcode_bitfield = $message_parser->bbcode_bitfield;

      $parse_poll->format_display($post_data['enable_bbcode'], $post_data['enable_urls'], $post_data['enable_smilies']);

      if ($post_data['poll_length'])
      {
         $poll_end = ($post_data['poll_length'] * 86400) + (($post_data['poll_start']) ? $post_data['poll_start'] : time());
      }

      $template->assign_vars(array(
         'S_HAS_POLL_OPTIONS'   => (sizeof($post_data['poll_options'])),
         'S_IS_MULTI_CHOICE'      => ($post_data['poll_max_options'] > 1) ? true : false,

         'POLL_QUESTION'      => $parse_poll->message,

         'L_POLL_LENGTH'      => ($post_data['poll_length']) ? sprintf($user->lang['POLL_RUN_TILL'], $user->format_date($poll_end)) : '',
         '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']))
      );

      $parse_poll->message = implode("\n", $post_data['poll_options']);
      $parse_poll->format_display($post_data['enable_bbcode'], $post_data['enable_urls'], $post_data['enable_smilies']);
      $preview_poll_options = explode('<br />', $parse_poll->message);
      unset($parse_poll);

      foreach ($preview_poll_options as $key => $option)
      {
         $template->assign_block_vars('poll_option', array(
            'POLL_OPTION_CAPTION'   => $option,
            'POLL_OPTION_ID'      => $key + 1)
         );
      }
      unset($preview_poll_options);
   }

   // Attachment Preview
   if (sizeof($message_parser->attachment_data))
   {
      $template->assign_var('S_HAS_ATTACHMENTS', true);

      $update_count = array();
      $attachment_data = $message_parser->attachment_data;

      parse_attachments($forum_id, $preview_message, $attachment_data, $update_count, true);

      foreach ($attachment_data as $i => $attachment)
      {
         $template->assign_block_vars('attachment', array(
            'DISPLAY_ATTACHMENT'   => $attachment)
         );
      }
      unset($attachment_data);
   }

   if (!sizeof($error))
   {
      $template->assign_vars(array(
         'PREVIEW_SUBJECT'      => $preview_subject,
         'PREVIEW_MESSAGE'      => $preview_message,
         'PREVIEW_SIGNATURE'      => $preview_signature,

         'S_DISPLAY_PREVIEW'      => true)
      );
   }
}

// Decode text for message display
$post_data['bbcode_uid'] = ($mode == 'quote' && !$preview && !$refresh && !sizeof($error)) ? $post_data['bbcode_uid'] : $message_parser->bbcode_uid;
$message_parser->decode_message($post_data['bbcode_uid']);

if ($mode == 'quote' && !$submit && !$preview && !$refresh)
{
   if ($config['allow_bbcode'])
   {
      $message_parser->message = '[quote=&quot;' . $post_data['quote_username'] . '&quot;]' . censor_text(trim($message_parser->message)) . "[/quote]\n";
   }
   else
   {
      $offset = 0;
      $quote_string = "&gt; ";
      $message = censor_text(trim($message_parser->message));
      // see if we are nesting. It's easily tricked but should work for one level of nesting
      if (strpos($message, "&gt;") !== false)
      {
         $offset = 10;
      }
      $message = utf8_wordwrap($message, 75 + $offset, "\n");

      $message = $quote_string . $message;
      $message = str_replace("\n", "\n" . $quote_string, $message);
      $message_parser->message =  $post_data['quote_username'] . " " . $user->lang['WROTE'] . ":\n" . $message . "\n";
   }
}

if (($mode == 'reply' || $mode == 'quote') && !$submit && !$preview && !$refresh)
{
   $post_data['post_subject'] = ((strpos($post_data['post_subject'], 'Re: ') !== 0) ? 'Re: ' : '') . censor_text($post_data['post_subject']);
}

$attachment_data = $message_parser->attachment_data;
$filename_data = $message_parser->filename_data;
$post_data['post_text'] = $message_parser->message;

if (sizeof($post_data['poll_options']) || !empty($post_data['poll_title']))
{
   $message_parser->message = $post_data['poll_title'];
   $message_parser->bbcode_uid = $post_data['bbcode_uid'];

   $message_parser->decode_message();
   $post_data['poll_title'] = $message_parser->message;

   $message_parser->message = implode("\n", $post_data['poll_options']);
   $message_parser->decode_message();
   $post_data['poll_options'] = explode("\n", $message_parser->message);
}

// MAIN POSTING PAGE BEGINS HERE

// Forum moderators?
$moderators = array();
if ($config['load_moderators'])
{
   get_moderators($moderators, $forum_id);
}

// Generate smiley listing
generate_smilies('inline', $forum_id);

// Generate inline attachment select box
posting_gen_inline_attachments($attachment_data);

// Do show topic type selection only in first post.
$topic_type_toggle = false;

if ($mode == 'post' || ($mode == 'edit' && $post_id == $post_data['topic_first_post_id']))
{
   $topic_type_toggle = posting_gen_topic_types($forum_id, $post_data['topic_type']);
}

$s_topic_icons = false;
if ($post_data['enable_icons'] && $auth->acl_get('f_icons', $forum_id))
{
   $s_topic_icons = posting_gen_topic_icons($mode, $post_data['icon_id']);
}

$bbcode_checked      = (isset($post_data['enable_bbcode'])) ? !$post_data['enable_bbcode'] : (($config['allow_bbcode']) ? !$user->optionget('bbcode') : 1);
$smilies_checked   = (isset($post_data['enable_smilies'])) ? !$post_data['enable_smilies'] : (($config['allow_smilies']) ? !$user->optionget('smilies') : 1);
$urls_checked      = (isset($post_data['enable_urls'])) ? !$post_data['enable_urls'] : 0;
$sig_checked      = $post_data['enable_sig'];
$lock_topic_checked   = (isset($topic_lock) && $topic_lock) ? $topic_lock : (($post_data['topic_status'] == ITEM_LOCKED) ? 1 : 0);
$lock_post_checked   = (isset($post_lock)) ? $post_lock : $post_data['post_edit_locked'];

// 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
$notify_set         = ($mode != 'edit' && $config['allow_topic_notify'] && $user->data['is_registered'] && !$post_data['notify_set']) ? $user->data['user_notify'] : $post_data['notify_set'];
$notify_checked      = (isset($notify)) ? $notify : (($mode == 'post') ? $user->data['user_notify'] : $notify_set);

// Page title & action URL
$s_action = append_sid("{$phpbb_root_path}posting.$phpEx", "mode=$mode&amp;f=$forum_id");
$s_action .= ($topic_id) ? "&amp;t=$topic_id" : '';
$s_action .= ($post_id) ? "&amp;p=$post_id" : '';

switch ($mode)
{
   case 'post':
      $page_title = $user->lang['POST_TOPIC'];
   break;

   case 'quote':
   case 'reply':
      $page_title = $user->lang['POST_REPLY'];
   break;

   case 'delete':
   case 'edit':
      $page_title = $user->lang['EDIT_POST'];
   break;
}

// Build Navigation Links
generate_forum_nav($post_data);

// Build Forum Rules
generate_forum_rules($post_data);

// Posting uses is_solved for legacy reasons. Plugins have to use is_solved to force themselves to be displayed.
if ($config['enable_post_confirm'] && !$user->data['is_registered'] && (isset($captcha) && $captcha->is_solved() === false) && ($mode == 'post' || $mode == 'reply' || $mode == 'quote'))
{

   $template->assign_vars(array(
      'S_CONFIRM_CODE'         => true,
      'CAPTCHA_TEMPLATE'         => $captcha->get_template(),
   ));
}

$s_hidden_fields = ($mode == 'reply' || $mode == 'quote') ? '<input type="hidden" name="topic_cur_post_id" value="' . $post_data['topic_last_post_id'] . '" />' : '';
$s_hidden_fields .= '<input type="hidden" name="lastclick" value="' . $current_time . '" />';
$s_hidden_fields .= ($draft_id || isset($_REQUEST['draft_loaded'])) ? '<input type="hidden" name="draft_loaded" value="' . request_var('draft_loaded', $draft_id) . '" />' : '';

if ($mode == 'edit')
{
   $s_hidden_fields .= build_hidden_fields(array(
      'edit_post_message_checksum'   => $post_data['post_checksum'],
      'edit_post_subject_checksum'   => $post_data['post_subject_md5'],
   ));
}

// Add the confirm id/code pair to the hidden fields, else an error is displayed on next submit/preview
if (isset($captcha) && $captcha->is_solved() !== false)
{
   $s_hidden_fields .= build_hidden_fields($captcha->get_hidden_fields());
}

$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"';
add_form_key('posting');


// Start assigning vars for main posting page ...
$template->assign_vars(array(
   'L_POST_A'               => $page_title,
   'L_ICON'               => ($mode == 'reply' || $mode == 'quote' || ($mode == 'edit' && $post_id != $post_data['topic_first_post_id'])) ? $user->lang['POST_ICON'] : $user->lang['TOPIC_ICON'],
   'L_MESSAGE_BODY_EXPLAIN'   => (intval($config['max_post_chars'])) ? sprintf($user->lang['MESSAGE_BODY_EXPLAIN'], intval($config['max_post_chars'])) : '',

   'FORUM_NAME'         => $post_data['forum_name'],
   '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']) : '',
   'SEO_DESC'              => $post_data['seo_desc'],
   'SEO_KEY'               => $post_data['seo_key'],
   'SEO_POST_KEY'          => $post_data['seo_post_key'],
   'S_TOPIC_SEO'         => (!empty($post_data['enable_topic_seo'])) ? true : false,
   'TOPIC_SEO_TITLE'       => $post_data['topic_seo_title'],
   'TOPIC_TITLE'         => censor_text($post_data['topic_title']),
   'MODERATORS'         => (sizeof($moderators)) ? implode(', ', $moderators[$forum_id]) : '',
   'USERNAME'            => ((!$preview && $mode != 'quote') || $preview) ? $post_data['username'] : '',
   'SUBJECT'            => $post_data['post_subject'],
   'MESSAGE'            => $post_data['post_text'],
   '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>'),
   'IMG_STATUS'         => ($img_status) ? $user->lang['IMAGES_ARE_ON'] : $user->lang['IMAGES_ARE_OFF'],
   'FLASH_STATUS'         => ($flash_status) ? $user->lang['FLASH_IS_ON'] : $user->lang['FLASH_IS_OFF'],
   'SMILIES_STATUS'      => ($smilies_status) ? $user->lang['SMILIES_ARE_ON'] : $user->lang['SMILIES_ARE_OFF'],
   'URL_STATUS'         => ($bbcode_status && $url_status) ? $user->lang['URL_IS_ON'] : $user->lang['URL_IS_OFF'],
   'MAX_FONT_SIZE'         => (int) $config['max_post_font_size'],
   'MINI_POST_IMG'         => $user->img('icon_post_target', $user->lang['POST']),
   'POST_DATE'            => ($post_data['post_time']) ? $user->format_date($post_data['post_time']) : '',
   'ERROR'               => (sizeof($error)) ? implode('<br />', $error) : '',
   'TOPIC_TIME_LIMIT'      => (int) $post_data['topic_time_limit'],
   'EDIT_REASON'         => $post_data['post_edit_reason'],
   'U_TOPIC_SEO_DESC'       => ($auth->acl_get('u_topic_seo_desc')),
   'U_TOPIC_SEO_KEY'       => ($auth->acl_get('u_topic_seo_key')),
    'U_SEO_POST_KEY'        => ($auth->acl_get('u_seo_post_key')),   
   'U_VIEW_FORUM'         => append_sid("{$phpbb_root_path}viewforum.$phpEx", "f=$forum_id"),
   'U_VIEW_TOPIC'         => ($mode != 'post') ? append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&amp;t=$topic_id") : '',
   'U_PROGRESS_BAR'      => append_sid("{$phpbb_root_path}posting.$phpEx", "f=$forum_id&amp;mode=popup"),
   'UA_PROGRESS_BAR'      => addslashes(append_sid("{$phpbb_root_path}posting.$phpEx", "f=$forum_id&amp;mode=popup")),

   'S_PRIVMSGS'            => false,
   'S_CLOSE_PROGRESS_WINDOW'   => (isset($_POST['add_file'])) ? true : false,
   'S_EDIT_POST'            => ($mode == 'edit') ? true : false,
   'S_EDIT_REASON'            => ($mode == 'edit' && $auth->acl_get('m_edit', $forum_id)) ? true : false,
   'S_DISPLAY_USERNAME'      => (!$user->data['is_registered'] || ($mode == 'edit' && $post_data['poster_id'] == ANONYMOUS)) ? true : false,
   'S_SHOW_TOPIC_ICONS'      => $s_topic_icons,
   '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,
   'S_BBCODE_ALLOWED'         => ($bbcode_status) ? 1 : 0,
   'S_BBCODE_CHECKED'         => ($bbcode_checked) ? ' checked="checked"' : '',
   'S_SMILIES_ALLOWED'         => $smilies_status,
   'S_SMILIES_CHECKED'         => ($smilies_checked) ? ' checked="checked"' : '',
   'S_SIG_ALLOWED'            => ($auth->acl_get('f_sigs', $forum_id) && $config['allow_sig'] && $user->data['is_registered']) ? true : false,
   'S_SIGNATURE_CHECKED'      => ($sig_checked) ? ' checked="checked"' : '',
   '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,
   'S_NOTIFY_CHECKED'         => ($notify_checked) ? ' checked="checked"' : '',
   '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,
   'S_LOCK_TOPIC_CHECKED'      => ($lock_topic_checked) ? ' checked="checked"' : '',
   'S_LOCK_POST_ALLOWED'      => ($mode == 'edit' && $auth->acl_get('m_edit', $forum_id)) ? true : false,
   'S_LOCK_POST_CHECKED'      => ($lock_post_checked) ? ' checked="checked"' : '',
   'S_LINKS_ALLOWED'         => $url_status,
   'S_MAGIC_URL_CHECKED'      => ($urls_checked) ? ' checked="checked"' : '',
   'S_TYPE_TOGGLE'            => $topic_type_toggle,
   'S_SAVE_ALLOWED'         => ($auth->acl_get('u_savedrafts') && $user->data['is_registered'] && $mode != 'edit') ? true : false,
   'S_HAS_DRAFTS'            => ($auth->acl_get('u_savedrafts') && $user->data['is_registered'] && $post_data['drafts']) ? true : false,
   'S_FORM_ENCTYPE'         => $form_enctype,

   'S_BBCODE_IMG'         => $img_status,
   'S_BBCODE_URL'         => $url_status,
   'S_BBCODE_FLASH'      => $flash_status,
   'S_BBCODE_QUOTE'      => $quote_status,

   'S_POST_ACTION'         => $s_action,
   'S_HIDDEN_FIELDS'      => $s_hidden_fields)
);

// Build custom bbcodes array
display_custom_bbcodes();

// Poll entry
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))*/))
   && $auth->acl_get('f_poll', $forum_id))
{
   $template->assign_vars(array(
      'S_SHOW_POLL_BOX'      => true,
      'S_POLL_VOTE_CHANGE'   => ($auth->acl_get('f_votechg', $forum_id) && $auth->acl_get('f_vote', $forum_id)),
      '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))),
      'S_POLL_DELETE_CHECKED'   => (!empty($poll_delete)) ? true : false,

      'L_POLL_OPTIONS_EXPLAIN'   => sprintf($user->lang['POLL_OPTIONS_' . (($mode == 'edit') ? 'EDIT_' : '') . 'EXPLAIN'], $config['max_poll_options']),

      'VOTE_CHANGE_CHECKED'   => (!empty($post_data['poll_vote_change'])) ? ' checked="checked"' : '',
      'POLL_TITLE'         => (isset($post_data['poll_title'])) ? $post_data['poll_title'] : '',
      'POLL_OPTIONS'         => (!empty($post_data['poll_options'])) ? implode("\n", $post_data['poll_options']) : '',
      'POLL_MAX_OPTIONS'      => (isset($post_data['poll_max_options'])) ? (int) $post_data['poll_max_options'] : 1,
      'POLL_LENGTH'         => $post_data['poll_length'])
   );
}

// Show attachment box for adding attachments if true
$allowed = ($auth->acl_get('f_attach', $forum_id) && $auth->acl_get('u_attach') && $config['allow_attachments'] && $form_enctype);

// Attachment entry
posting_gen_attachment_entry($attachment_data, $filename_data, $allowed);

// Output page ...
page_header($page_title, false);

$template->set_filenames(array(
   'body' => 'posting_body.html')
);

make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));

// Topic review
if ($mode == 'reply' || $mode == 'quote')
{
   if (topic_review($topic_id, $forum_id))
   {
      $template->assign_var('S_DISPLAY_REVIEW', true);
   }
}

page_footer();

/**
* Show upload popup (progress bar)
*/
function upload_popup($forum_style = 0)
{
   global $template, $user;

   ($forum_style) ? $user->setup('posting', $forum_style) : $user->setup('posting');

   page_header($user->lang['PROGRESS_BAR'], false);

   $template->set_filenames(array(
      'popup'   => 'posting_progress_bar.html')
   );

   $template->assign_vars(array(
      'PROGRESS_BAR'   => $user->img('upload_bar', $user->lang['UPLOAD_IN_PROGRESS']))
   );

   $template->display('popup');

   garbage_collection();
   exit_handler();
}

/**
* Do the various checks required for removing posts as well as removing it
*/
function handle_post_delete($forum_id, $topic_id, $post_id, &$post_data)
{
   global $user, $db, $auth, $config;
   global $phpbb_root_path, $phpEx;
   // If moderator removing post or user itself removing post, present a confirmation screen
   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'])))
   {
      $s_hidden_fields = build_hidden_fields(array(
         'p'      => $post_id,
         'f'      => $forum_id,
         'mode'   => 'delete')
      );

      if (confirm_box(true))
      {
         $data = array(
            'topic_first_post_id'   => $post_data['topic_first_post_id'],
            'topic_last_post_id'   => $post_data['topic_last_post_id'],
            'topic_replies_real'   => $post_data['topic_replies_real'],
            'topic_approved'      => $post_data['topic_approved'],
            'topic_type'         => $post_data['topic_type'],
            'post_approved'         => $post_data['post_approved'],
            'post_reported'         => $post_data['post_reported'],
            'post_time'            => $post_data['post_time'],
            'poster_id'            => $post_data['poster_id'],
            'post_postcount'      => $post_data['post_postcount']
         );

         $next_post_id = delete_post($forum_id, $topic_id, $post_id, $data);
                  if (!function_exists('get_thanks'))
         {
            include($phpbb_root_path . 'includes/functions_thanks.' . $phpEx);
         }         
         delete_post_thanks($post_id);
         $post_username = ($post_data['poster_id'] == ANONYMOUS && !empty($post_data['post_username'])) ? $post_data['post_username'] : $post_data['username'];

         if ($next_post_id === false)
         {
            add_log('mod', $forum_id, $topic_id, 'LOG_DELETE_TOPIC', $post_data['topic_title'], $post_username);

            $meta_info = append_sid("{$phpbb_root_path}viewforum.$phpEx", "f=$forum_id");
            $message = $user->lang['POST_DELETED'];
         }
         else
         {
            add_log('mod', $forum_id, $topic_id, 'LOG_DELETE_POST', $post_data['post_subject'], $post_username);

            $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";
            $message = $user->lang['POST_DELETED'] . '<br /><br />' . sprintf($user->lang['RETURN_TOPIC'], '<a href="' . $meta_info . '">', '</a>');
         }

         meta_refresh(3, $meta_info);
         $message .= '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id) . '">', '</a>');
         trigger_error($message);
      }
      else
      {
         confirm_box(false, 'DELETE_POST', $s_hidden_fields);
      }
   }

   // If we are here the user is not able to delete - present the correct error message
   if ($post_data['poster_id'] != $user->data['user_id'] && $auth->acl_get('f_delete', $forum_id))
   {
      trigger_error('DELETE_OWN_POSTS');
   }

   if ($post_data['poster_id'] == $user->data['user_id'] && $auth->acl_get('f_delete', $forum_id) && $post_id != $post_data['topic_last_post_id'])
   {
      trigger_error('CANNOT_DELETE_REPLIED');
   }

   trigger_error('USER_CANNOT_DELETE');
}

?>
 


          Вернуться наверх  
 


Аватар пользователя

Случайно обнаружил еще одну галочку с автоподпиской. Зайдя в любую тему в самом низу есть менюшка:
Список форумов Отписаться от темы (Подписаться на тему) В закладки
Вложение :

.
Но она судя по всему второстепенная :du_ma_et:


          Вернуться наверх  
 


Аватар пользователя

Да епрст, в личных настройках профиля есть такое, вот блин проглядел
Пожалуйста Зарегистрируйтесь чтобы увидеть ссылку


_________________
Подпись:
-_- -_-
На вопросы, связанные с phpBB, по ЛС не отвечаю !!!
          Вернуться наверх  
 


Аватар пользователя

DeaDRoMeO писал(а):

Да епрст, в личных настройках профиля есть такое, вот блин проглядел

Сергей, ты гений! Вот я все просмотрел, вот как так то!? :-0=)
Спасибо, работает :ya_hoo_oo:
P.S. А гугл этой проблемы не знает! ;;-)))
У меня тут вот какая мысль появилась.
Конечно можно включить на постоянку, как это реализовано в микро моде (есть на этом форуме). Но это очень быстро будет напрягать пользователей.
Но, если сделать так, что бы пользователи единожды, автоматом подписывались на тему:
1. Которую создали.
2. В которой ответили.
И если они после этого от нее отписались, то с этой темы уже не будут приходить сообщения на мыло. Если конечно по новой не подпишешься.
На мой взгляд очень интересная и полезная идея. Что скажите форумчане? :mi_ga_et:


          Вернуться наверх  
 


Аватар пользователя

Механизм сложноватый, вижу так - при открытии темы пользователем делаем запрос в БД - есть ли уже в теме сообщения от данного пользователя. Нет - ставим галочку автоматом, есть - ничего не делаем, пользователь сам выберет что делать

По сути логика такова - обязательно подписывать пользователя на тему при его первом сообщении, если уже есть посты его в данной теме - оставлять все как естьё


_________________
Подпись:
-_- -_-
На вопросы, связанные с phpBB, по ЛС не отвечаю !!!
          Вернуться наверх  
 


Аватар пользователя

А все таки почему могут не приходить уведомления на почту о сообщениях в подписанных темах?
Грешил на хостинг, но уведомления о благодарностях приходят, пробовал отправить письмо из лички - приходит
А вот если подписан на тему, то не приходит.
Это мне один пользователь сообщил и я стал проверять, раньше это все работало, модов я никаких не ставил. Форум крутися и крутится сам по себе.
Какой файл за это отвечает?

Сейчас проверил. Ни к админу, ни к обычному пользователю не пришло уведомление об ответе. :ny_tik:


          Вернуться наверх  
 


Аватар пользователя

sor3 писал(а):

А все таки почему могут не приходить уведомления на почту о сообщениях в подписанных темах?

Почта форума в настройках не от майлру случайно? У меня раньше была майлру, потом у них появилась какая то система безопасности слишком крутая, пришлось другое мыло под форум регистрировать на другом почтовом сервисе


_________________
Подпись:
-_- -_-
На вопросы, связанные с phpBB, по ЛС не отвечаю !!!
          Вернуться наверх  
 


Аватар пользователя

DeaDRoMeO писал(а):

Почта форума в настройках не от майлру случайно? У меня раньше была майлру, потом у них появилась какая то система безопасности слишком крутая, пришлось другое мыло под форум регистрировать на другом почтовом сервисе

Не понял, а где это прописано?
в настройках указан адрес вида admin@домен форума.ру
Видимо как то через хостинг отправляется.
Тут смысл в том, что извещения о личных сообщения и благодарности приходят на почты пользователей
А вот сообщения о новых сообщениях из тем, если есть подписка на тему, нет.


          Вернуться наверх  
 


Аватар пользователя

Версия форума и стиля совпадает?


_________________
Подпись:
-_- -_-
На вопросы, связанные с phpBB, по ЛС не отвечаю !!!
          Вернуться наверх  
 


Аватар пользователя

Версия форума 3.0.14
А версию стиля где посмотреть? Стиль просилвер


          Вернуться наверх  
 


Аватар пользователя

В найстроках профиля разрешено получать рассылки? Не мешало бы создать темку на своем форуме и спросить пользователей всем ли не приходят уведомления


_________________
Подпись:
-_- -_-
На вопросы, связанные с phpBB, по ЛС не отвечаю !!!
          Вернуться наверх  
 


Аватар пользователя

Получать e-mail-рассылки администрации: Да
Я пробовал рассылать рассылки. Они приходят.
Также приходят на почту уведомления о благодарностях
Не приходят только уведомления из подписанных тем


          Вернуться наверх  
 


Аватар пользователя

Может чего в свое время вырезали из кода? Обычно если уведомления не работают то сразу все, а не как у вас частично


_________________
Подпись:
-_- -_-
На вопросы, связанные с phpBB, по ЛС не отвечаю !!!
          Вернуться наверх  
 


Аватар пользователя

Вот думаю может плюнуть на все и переконвертировать в 3.1?
Моного чего потеряется?


          Вернуться наверх  
 


Аватар пользователя

Все моды и доработки


_________________
Подпись:
-_- -_-
На вопросы, связанные с phpBB, по ЛС не отвечаю !!!
          Вернуться наверх  
 


Аватар пользователя

Подскажите пожалуйста, у меня домен в зоне рф. Само собой домен выглядит не особо приятно при получении письма по почте. Скажите пожалуйста, как сделать так, чтобы домен в зоне рф именно отображался в зоне .рф. А именно домен.рф, а не 3210-dsf.pai как то так


          Вернуться наверх  
 


Аватар пользователя

А если в текстовых файлах уведомлений напрямую прописать адрес форума?


_________________
Подпись:
-_- -_-
На вопросы, связанные с phpBB, по ЛС не отвечаю !!!
          Вернуться наверх  
 


Аватар пользователя

Исправьте пожалуйста, треш ждать по 30 минут писать сообщения, потом забываешь))) Прошу принять меня в группу Опытные пользователи

По поводу email так там все сделана кодом, что если ссылку вставить, то прямая ссылка добавляться для активации или лс не будет.


          Вернуться наверх  
 


Аватар пользователя

Привет. У меня проблемы с настройками уведомлений в профиле пользователей. При нажатии выдает:

Страница недоступна
Сайт vahta-forum ru пока не может обработать этот запрос.
HTTP ERROR 500

Как это исправить? может стоит перезалить файлы отвечающие за вывод уведомления? где эти файлы находятся?


          Вернуться наверх  
 


Аватар пользователя

Есть кто живой?) проблему так и не устранил. Облазил инет и сам ковырялся в файлах. Так и остается ошибка при переходе на "Изменить настройки уведомлений"


          Вернуться наверх  
 
 
Начать новую тему Ответить на тему


Дополнительные возможности

  Похожие темы  Автор  Ответов  Просмотров  Последнее сообщение 
Аватар пользователя [Общая тема]E-mail рассылки и уведомления phpbb3
Тема полностью посвящена проблемам с рассылкой и уведомлениями на форумах phpbb3

nudevolga

101

6323

Случайный аватар. Пользователю рекомендуется загрузить свой аватар в Настройках профиля

26 янв 2016, 14:19

djok

Случайный аватар. Пользователю рекомендуется загрузить свой аватар в Настройках профиля не приходят уведомления о новом ответе и т.п. на почту польз

maa1988

15

746

Аватар пользователя

17 янв 2014, 12:23

ZmejNK

Аватар пользователя E-mail с ключем активации

1c3d.md

8

313

Аватар пользователя

16 ноя 2013, 19:14

1c3d.md

Случайный аватар. Пользователю рекомендуется загрузить свой аватар в Настройках профиля активация пользователем (e-mail подтверждение)

GGK

5

209

Случайный аватар. Пользователю рекомендуется загрузить свой аватар в Настройках профиля

04 июл 2017, 17:42

GGK

Аватар пользователя NV who was here phpbb3 ? - Кто был на форуме ?
NV who was here phpbb3 ? - модификация добавляет на форум phpbb3 новый информационный блок, содержащий в себе полный список тех, кто был на форуме за день

DeaDRoMeO

52

7356

Аватар пользователя

05 фев 2015, 16:13

DeaDRoMeO

Оставить свой комментарий

Поделиться темой с помощью

Ссылки на тему

Прямая ссылка:
BB-код для форумов, сайтов, блогов:
HTML ссылка:
 


cron

Самая неформальная поддержка phpBB :P