rev.13 Add subscriptions 4

Add sending emails
Change template format for emails
Change previousPost() method for Post
This commit is contained in:
Visman 2020-09-04 23:41:51 +07:00
parent e544b35fea
commit 64c4735f2e
48 changed files with 500 additions and 234 deletions

View file

@ -4,6 +4,7 @@ namespace ForkBB\Core;
use ForkBB\Core\Exceptions\MailException;
use ForkBB\Core\Exceptions\SmtpException;
use function \ForkBB\e;
class Mail
{
@ -62,6 +63,14 @@ class Mail
*/
protected $maxRecipients = 1;
/**
* @var array
*/
protected $tplHeaders = [
'Subject' => true,
'Content-Type' => true,
];
public function __construct($host, $user, $pass, $ssl, $eol)
{
if (
@ -180,7 +189,12 @@ class Mail
public function reset(): Mail
{
$this->to = [];
$this->headers = [];
$this->headers = [
'MIME-Version' => '1.0',
'Content-Transfer-Encoding' => '8bit',
'Content-Type' => 'text/plain; charset=UTF-8',
'X-Mailer' => 'ForkBB Mailer',
];
$this->message = null;
return $this;
@ -330,18 +344,36 @@ class Mail
$tpl = \trim(\file_get_contents($file));
foreach ($data as $key => $val) {
$tpl = \str_replace('<' . $key . '>', (string) $val, $tpl);
$tpl = \str_replace('{!' . $key . '!}', (string) $val, $tpl);
}
list($subject, $tpl) = \explode("\n", $tpl, 2);
if (! isset($tpl)) {
throw new MailException("The template is empty ({$file}).");
if (false !== \strpos($tpl, '{{')) {
foreach ($data as $key => $val) {
$tpl = \str_replace('{{' . $key . '}}', e((string) $val), $tpl);
}
}
$this->setSubject(\substr($subject, 8));
if (! \preg_match('%^(.+?)(?:\r\n\r\n|\n\n|\r\r)(.+)$%s', $tpl, $matches)) {
throw new MailException("Unknown format template ({$file}).");
}
return $this->setMessage($tpl);
foreach (\preg_split('%\r\n|\n|\r%', $matches[1]) as $line) {
list($type, $value) = \array_map('\\trim', \explode(':', $line, 2));
if (! isset($this->tplHeaders[$type])) {
throw new MailException("Unknown template header: {$type}.");
} elseif ('' == $value) {
throw new MailException("Empty template header: {$type}.");
}
if ('Subject' === $type) {
$this->setSubject($value);
} else {
$this->headers[$type] = \preg_replace('%[\x00-\x1F]%', '', $value);
}
}
return $this->setMessage($matches[2]);
}
/**
@ -377,13 +409,7 @@ class Mail
throw new MailException('The body of the email is empty.');
}
$this->headers = \array_replace($this->headers, [
'Date' => \gmdate('r'),
'MIME-Version' => '1.0',
'Content-transfer-encoding' => '8bit',
'Content-type' => 'text/plain; charset=utf-8',
'X-Mailer' => 'ForkBB Mailer',
]);
$this->headers['Date'] = \gmdate('r');
if (\is_array($this->smtp)) {
return $this->smtp();

View file

@ -634,4 +634,29 @@ class Update extends Admin
return null;
}
/**
* rev.12 to rev.13
*/
protected function stageNumber12(array $args): ?int
{
$coreConfig = new CoreConfig($this->c->DIR_CONFIG . '/' . self::CONFIG_FILE);
$coreConfig->add(
'shared=>SubscriptionModelSend',
'\\ForkBB\\Models\\Subscription\\Send::class'
);
$result = $coreConfig->delete(
'multiple=>BanListModelIsBanned',
);
$coreConfig->add(
'shared=>BanListModelIsBanned',
'\\ForkBB\\Models\\BanList\\IsBanned::class'
);
$coreConfig->save();
return null;
}
}

View file

@ -234,7 +234,7 @@ class Auth extends Page
->setFolder($this->c->DIR_LANG)
->setLanguage($tmpUser->language)
->setTo($tmpUser->email, $tmpUser->username)
->setFrom($this->c->config->o_webmaster_email, __('Mailer', $this->c->config->o_board_title))
->setFrom($this->c->config->o_webmaster_email, $tplData['fMailer'])
->setTpl('passphrase_reset.tpl', $tplData)
->send();
} catch (MailException $e) {

View file

@ -187,7 +187,7 @@ class Email extends Page
->setFolder($this->c->DIR_LANG)
->setLanguage($this->curUser->language)
->setTo($this->curUser->email)
->setFrom($this->c->config->o_webmaster_email, __('Mailer', $this->c->config->o_board_title))
->setFrom($this->c->config->o_webmaster_email, $tplData['fMailer'])
->setReplyTo($this->user->email, $this->user->username)
->setTpl('form_email.tpl', $tplData)
->send();

View file

@ -35,6 +35,8 @@ class Post extends Page
$this->c->Lang->load('post');
$this->onlinePos = 'forum-' . $forum->id;
if ('POST' === $method) {
$v = $this->messageValidator($forum, 'NewTopic', $args, false, true);
@ -59,7 +61,6 @@ class Post extends Page
}
$this->nameTpl = 'post';
$this->onlinePos = 'forum-' . $forum->id;
$this->canonical = $this->c->Router->link(
'NewTopic',
[
@ -96,6 +97,8 @@ class Post extends Page
$this->c->Lang->load('post');
$this->onlinePos = 'topic-' . $topic->id;
if ('POST' === $method) {
$v = $this->messageValidator($topic, 'NewReply', $args);
@ -129,7 +132,6 @@ class Post extends Page
}
$this->nameTpl = 'post';
$this->onlinePos = 'topic-' . $topic->id;
$this->canonical = $this->c->Router->link(
'NewReply',
[
@ -156,6 +158,8 @@ class Post extends Page
*/
protected function endPost(Model $model, Validator $v): Page
{
$this->c->Online->calc($this); // для подписок
$now = \time();
$username = $this->user->isGuest ? $v->username : $this->user->username;
$merge = false;
@ -278,6 +282,16 @@ class Post extends Page
$this->c->search->index($lastPost, 'merge');
} else {
$this->c->search->index($post);
if ($createTopic) {
if ('1' == $this->c->config->o_forum_subscriptions) { // ????
$this->c->subscriptions->send($post, $topic);
}
} else {
if ('1' == $this->c->config->o_topic_subscriptions) { // ????
$this->c->subscriptions->send($post);
}
}
}
return $this->c->Redirect->page('ViewPost', ['id' => $merge ? $lastPost->id : $post->id])->message('Post redirect');

View file

@ -118,7 +118,7 @@ class Email extends Profile
->setFolder($this->c->DIR_LANG)
->setLanguage($this->curUser->language)
->setTo($v->new_email, $this->curUser->username)
->setFrom($this->c->config->o_webmaster_email, __('Mailer', $this->c->config->o_board_title))
->setFrom($this->c->config->o_webmaster_email, $tplData['fMailer'])
->setTpl('activate_email.tpl', $tplData)
->send();
} catch (MailException $e) {

View file

@ -191,7 +191,7 @@ class Register extends Page
->setFolder($this->c->DIR_LANG)
->setLanguage($this->c->config->o_default_lang)
->setTo($this->c->config->o_mailing_list)
->setFrom($this->c->config->o_webmaster_email, __('Mailer', $this->c->config->o_board_title))
->setFrom($this->c->config->o_webmaster_email, $tplData['fMailer'])
->setTpl('new_user.tpl', $tplData)
->send();
} catch (MailException $e) {
@ -228,7 +228,7 @@ class Register extends Page
->setFolder($this->c->DIR_LANG)
->setLanguage($this->user->language)
->setTo($v->email)
->setFrom($this->c->config->o_webmaster_email, __('Mailer', $this->c->config->o_board_title))
->setFrom($this->c->config->o_webmaster_email, $tplData['fMailer'])
->setTpl('welcome.tpl', $tplData)
->send();
} catch (MailException $e) {

View file

@ -186,7 +186,7 @@ class Report extends Page
->setFolder($this->c->DIR_LANG)
->setLanguage($this->c->config->o_default_lang) // ????
->setTo($this->c->config->o_mailing_list)
->setFrom($this->c->config->o_webmaster_email, __('Mailer', $this->c->config->o_board_title))
->setFrom($this->c->config->o_webmaster_email, $tplData['fMailer'])
->setTpl('new_report.tpl', $tplData)
->send();
}

View file

@ -8,23 +8,24 @@ use ForkBB\Models\Post\Model as Post;
class PreviousPost extends Action
{
/**
* Вычисляет номер сообщения перед указанным
* Вычисляет номер сообщения перед указанным или его время публикации
*
* @param Post $post
*
* @return null|int
*/
public function previousPost(Post $post): ?int
public function previousPost(Post $post, $returnId = true): ?int
{
$vars = [
':pid' => $post->id,
':tid' => $post->topic_id,
];
$query = 'SELECT p.id
$field = $returnId ? 'id' : 'posted';
$query = "SELECT p.{$field}
FROM ::posts AS p
WHERE p.id < ?i:pid AND p.topic_id=?i:tid
ORDER BY p.id DESC
LIMIT 1';
LIMIT 1";
$id = $this->c->DB->query($query, $vars)->fetchColumn();

View file

@ -29,7 +29,7 @@ class Model extends ParentModel
/**
* Проверяет список моделей на форумы/темы
* Заполняет $forums и $topics
* Заполняет forums, topics и users
*/
protected function check(array $models, bool $mayBeUsers = false): void
{

View file

@ -0,0 +1,157 @@
<?php
namespace ForkBB\Models\Subscription;
use ForkBB\Models\Method;
use ForkBB\Models\Forum\Model as Forum;
use ForkBB\Models\Post\Model as Post;
use ForkBB\Models\Topic\Model as Topic;
use ForkBB\Core\Exceptions\MailException;
use function \ForkBB\__;
class Send extends Method
{
/**
* Рассылает письма по подпискам для новых тем/ответов
*/
public function send(Post $post, Topic $topic = null)
{
try {
if (null === $topic) {
$newTopic = false;
$tplNameFull = 'new_reply_full.tpl';
$tplNameShort = 'new_reply.tpl';
$topic = $post->parent;
$forum = $topic->parent;
$vars = [
':uid' => $this->c->user->id,
':tid' => $topic->id,
':prev' => $this->c->posts->previousPost($post, false),
];
$query = 'SELECT u.id, u.username, u.group_id, u.email, u.email_confirmed, u.notify_with_post, u.language
FROM ::users AS u
INNER JOIN ::topic_subscriptions AS s ON u.id=s.user_id
LEFT JOIN ::online AS o ON u.id=o.user_id
WHERE s.topic_id=?i:tid AND u.id!=?i:uid AND COALESCE(o.logged, u.last_visit)>?i:prev';
} else {
$newTopic = true;
$tplNameFull = 'new_topic_full.tpl';
$tplNameShort = 'new_topic.tpl';
$forum = $topic->parent;
$vars = [
':uid' => $this->c->user->id,
':fid' => $forum->id,
];
$query = 'SELECT u.id, u.username, u.group_id, u.email, u.email_confirmed, u.notify_with_post, u.language
FROM ::users AS u
INNER JOIN ::forum_subscriptions AS s ON u.id=s.user_id
WHERE s.forum_id=?i:fid AND u.id!=?i:uid';
}
$data = [];
$grPerm = [
$this->c->user->group_id => true,
];
$stmt = $this->c->DB->query($query, $vars);
while ($row = $stmt->fetch()) {
$user = $this->c->users->create($row);
if (
1 !== $user->email_confirmed
|| $this->c->bans->isBanned($user) > 0
|| $this->c->Online->isOnline($user)
) {
continue;
}
if (! isset($grPerm[$user->group_id])) {
$group = $this->c->groups->get($user->group_id);
$grPerm[$user->group_id] = $this->c->ForumManager->init($group)->get($forum->id) instanceof Forum;
}
if (! $grPerm[$user->group_id]) {
continue;
}
if (empty($data[$user->language])) {
$data[$user->language] = [
'short' => [],
'full' => [],
];
}
$type = 1 === $user->notify_with_post ? 'full' : 'short';
$data[$user->language][$type][$user->email] = $user->username;
}
foreach ($data as $lang => $dataLang) {
$this->c->Lang->load('common', $lang);
if ($newTopic) {
$tplData = [
'forumName' => $forum->name,
'poster' => $topic->poster,
'topicSubject' => $topic->name,
'topicLink' => $topic->link,
'unsubscribeLink' => $forum->link,
'button' => __('Unsubscribe'),
'fMailer' => __('Mailer', $this->c->config->o_board_title),
];
} else {
$tplData = [
'forumName' => $forum->name,
'replier' => $post->poster,
'topicSubject' => $topic->name,
'postLink' => $post->link,
'unsubscribeLink' => $topic->link,
'button' => __('Unsubscribe'),
'fMailer' => __('Mailer', $this->c->config->o_board_title),
];
}
if (! empty($dataLang['short'])) {
$this->c->Mail
->reset()
->setMaxRecipients((int) $this->c->config->i_email_max_recipients)
->setFolder($this->c->DIR_LANG)
->setLanguage($lang)
->setFrom($this->c->config->o_webmaster_email, $tplData['fMailer'])
->setTpl($tplNameShort, $tplData);
foreach ($dataLang['short'] as $email => $name) {
$this->c->Mail->addTo($email, $name);
}
$this->c->Mail->send();
}
if (! empty($dataLang['full'])) {
// $message = $this->c->Parser->prepare($post->message); // парсер хранит сообщение
$tplData['message'] = $this->c->Parser->parseMessage(null, (bool) $post->hide_smilies);
$this->c->Mail
->reset()
->setMaxRecipients((int) $this->c->config->i_email_max_recipients)
->setFolder($this->c->DIR_LANG)
->setLanguage($lang)
->setFrom($this->c->config->o_webmaster_email, $tplData['fMailer'])
->setTpl($tplNameFull, $tplData);
foreach ($dataLang['full'] as $email => $name) {
$this->c->Mail->addTo($email, $name);
}
$this->c->Mail->send();
}
}
$this->c->Lang->load('common', $this->c->user->language);
} catch (MailException $e) {
// ????
}
}
}

View file

@ -42,7 +42,7 @@ if (
}
$c->PUBLIC_URL = $c->BASE_URL . $forkPublicPrefix;
$c->FORK_REVISION = 12;
$c->FORK_REVISION = 13;
$c->START = $forkStart;
$c->DIR_APP = __DIR__;
$c->DIR_PUBLIC = $forkPublic;

View file

@ -136,6 +136,10 @@ return [
'ProfileRules' => \ForkBB\Models\Rules\Profile::class,
'UsersRules' => \ForkBB\Models\Rules\Users::class,
'SubscriptionModelSend' => \ForkBB\Models\Subscription\Send::class,
'BanListModelIsBanned' => \ForkBB\Models\BanList\IsBanned::class,
],
'multiple' => [
'CtrlPrimary' => \ForkBB\Controllers\Primary::class,
@ -200,7 +204,6 @@ return [
'BanListModelLoad' => \ForkBB\Models\BanList\Load::class,
'BanListModelCheck' => \ForkBB\Models\BanList\Check::class,
'BanListModelDelete' => \ForkBB\Models\BanList\Delete::class,
'BanListModelIsBanned' => \ForkBB\Models\BanList\IsBanned::class,
'BanListModelFilter' => \ForkBB\Models\BanList\Filter::class,
'BanListModelGetList' => \ForkBB\Models\BanList\GetList::class,
'BanListModelInsert' => \ForkBB\Models\BanList\Insert::class,

View file

@ -1,12 +1,11 @@
Subject: Change email address requested
Hello <username>,
Hello {!username!},
You have requested to have a new email address assigned to your account in the discussion forum at <fRootLink>. If you didn't request this or if you don't want to change your email address you should just ignore this message. Only if you visit the activation page below will your email address be changed. In order for the activation page to work, you must be logged in to the forum.
You have requested to have a new email address assigned to your account in the discussion forum at {!fRootLink!}. If you didn't request this or if you don't want to change your email address you should just ignore this message. Only if you visit the activation page below will your email address be changed. In order for the activation page to work, you must be logged in to the forum.
To change your email address, please visit the following page:
<link>
To change your email address, please visit the following page: {!link!}
--
<fMailer> Mailer
{!fMailer!} Mailer
(Do not reply to this message)

View file

@ -1,9 +1,9 @@
Subject: Alert - Banned email detected
User '<username>' changed to banned email address: <email>
User {!username!} changed to banned email address: {!email!}
User profile: <profile_url>
User profile: {!profile_url!}
--
<board_mailer> Mailer
{!board_mailer!} Mailer
(Do not reply to this message)

View file

@ -1,9 +1,9 @@
Subject: Alert - Banned email detected
User '<username>' posted with banned email address: <email>
User {!username!} posted with banned email address: {!email!}
Post URL: <post_url>
Post URL: {!post_url!}
--
<board_mailer> Mailer
{!board_mailer!} Mailer
(Do not reply to this message)

View file

@ -1,9 +1,9 @@
Subject: Alert - Banned email detected
User '<username>' registered with banned email address: <email>
User {!username!} registered with banned email address: {!email!}
User profile: <profile_url>
User profile: {!profile_url!}
--
<board_mailer> Mailer
{!board_mailer!} Mailer
(Do not reply to this message)

View file

@ -1,9 +1,9 @@
Subject: Alert - Duplicate email detected
User '<username>' changed to an email address that also belongs to: <dupe_list>
User {!username!} changed to an email address that also belongs to: {!dupe_list!}
User profile: <profile_url>
User profile: {!profile_url!}
--
<board_mailer> Mailer
{!board_mailer!} Mailer
(Do not reply to this message)

View file

@ -1,9 +1,9 @@
Subject: Alert - Duplicate email detected
User '<username>' registered with an email address that also belongs to: <dupe_list>
User {!username!} registered with an email address that also belongs to: {!dupe_list!}
User profile: <profile_url>
User profile: {!profile_url!}
--
<board_mailer> Mailer
{!board_mailer!} Mailer
(Do not reply to this message)

View file

@ -1,15 +1,15 @@
Subject: <mailSubject>
Subject: {!mailSubject!}
Hello <username>,
Hello {!username!},
<sender> from <fTitle> has sent you a message. You can reply to <sender> by replying to this email.
'{!sender!}' from '{!fTitle!}' has sent you a message. You can reply to '{!sender!}' by replying to this email.
The message reads as follows:
-----------------------------------------------------------------------
<mailMessage>
{!mailMessage!}
-----------------------------------------------------------------------
--
<fMailer> Mailer
{!fMailer!} Mailer

View file

@ -1,10 +1,10 @@
Subject: New personal message: <mail_subject>
Subject: New personal message: {!mail_subject!}
Hello, <user>!
Hello, {!user!}!
<sender> from <board_title> has sent you a personal message.
The message is located at <message_url>
'{!sender!}' from '{!board_title!}' has sent you a personal message.
The message is located at {!message_url!}
--
<board_mailer> Mailer
--
{!board_mailer!} Mailer
(Do not reply to this message)

View file

@ -1,11 +1,11 @@
Subject: Reply to topic: '<topic_subject>'
Subject: Reply to topic: {!topicSubject!}
<replier> has replied to the topic '<topic_subject>' to which you are subscribed. There may be more new replies, but this is the only notification you will receive until you visit the board again.
'{!replier!}' has replied to the topic '{!topicSubject!}' to which you are subscribed. There may be more new replies, but this is the only notification you will receive until you visit the board again.
The post is located at <post_url>
The post is located at {!postLink!}
You can unsubscribe by going to <unsubscribe_url> and clicking the Unsubscribe link at the bottom of the page.
You can unsubscribe by going to {!unsubscribeLink!} and clicking the {!button!} button at the bottom of the page.
--
<board_mailer> Mailer
{!fMailer!} Mailer
(Do not reply to this message)

View file

@ -1,18 +1,30 @@
Subject: Reply to topic: '<topic_subject>'
Subject: Reply to topic: {!topicSubject!}
Content-Type: text/html; charset=UTF-8
<replier> has replied to the topic '<topic_subject>' to which you are subscribed. There may be more new replies, but this is the only notification you will receive until you visit the board again.
The post is located at <post_url>
The message reads as follows:
-----------------------------------------------------------------------
<message>
-----------------------------------------------------------------------
You can unsubscribe by going to <unsubscribe_url> and clicking the Unsubscribe link at the bottom of the page.
--
<board_mailer> Mailer
(Do not reply to this message)
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{topicSubject}}</title>
</head>
<body>
<p>'{{replier}}' has replied to the topic '<a href="{!topicLink!}">{{topicSubject}}</a>' to which you are subscribed. There may be more new replies, but this is the only notification you will receive until you visit the board again.</p>
<p></p>
<p>The message reads as follows:</p>
<p>-----------------------------------------------------------------------</p>
<p></p>
<div class="f-post-body">
<div class="f-post-main">
<p>{!message!}</p>
</div>
</div>
<p></p>
<p>-----------------------------------------------------------------------</p>
<p></p>
<p>You can unsubscribe by going to <a href="{!unsubscribeLink!}">link</a> and clicking the {!button!} button at the bottom of the page.</p>
<p></p>
<p>--</p>
<p>{{fMailer}} Mailer</p>
<p>(Do not reply to this message)</p>
</body>
</html>

View file

@ -1,9 +1,9 @@
Subject: Report(<forumId>) - '<topicSubject>'
Subject: Report ({!forumId!}) - '{!topicSubject!}'
User '<username>' has reported the following message: <postLink>
User '{!username!}' has reported the following message: {!postLink!}
Reason: <reason>
Reason: {!reason!}
--
<fMailer> Mailer
{!fMailer!} Mailer
(Do not reply to this message)

View file

@ -1,11 +1,11 @@
Subject: New topic in forum: '<forum_name>'
Subject: New topic in forum: {!forumName!}
<poster> has posted a new topic '<topic_subject>' in the forum '<forum_name>', to which you are subscribed.
'{!poster!}' has posted a new topic '{!topicSubject!}' in the forum '{!forumName!}', to which you are subscribed.
The topic is located at <topic_url>
The topic is located at {!topicLink!}
You can unsubscribe by going to <unsubscribe_url> and clicking the Unsubscribe link at the bottom of the page.
You can unsubscribe by going to {!unsubscribeLink!} and clicking the {!button!} button at the bottom of the page.
--
<board_mailer> Mailer
{!fMailer!} Mailer
(Do not reply to this message)

View file

@ -1,18 +1,30 @@
Subject: New topic in forum: '<forum_name>'
Subject: New topic in forum: {!forumName!}
Content-Type: text/html; charset=UTF-8
<poster> has posted a new topic '<topic_subject>' in the forum '<forum_name>', to which you are subscribed.
The topic is located at <topic_url>
The message reads as follows:
-----------------------------------------------------------------------
<message>
-----------------------------------------------------------------------
You can unsubscribe by going to <unsubscribe_url> and clicking the Unsubscribe link at the bottom of the page.
--
<board_mailer> Mailer
(Do not reply to this message)
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{topicSubject}}</title>
</head>
<body>
<p>'{{poster}}' has posted a new topic '<a href="{!topicLink!}">{{topicSubject}}</a>' in the forum '{{forumName}}', to which you are subscribed.</p>
<p></p>
<p>The message reads as follows:</p>
<p>-----------------------------------------------------------------------</p>
<p></p>
<div class="f-post-body">
<div class="f-post-main">
<p>{!message!}</p>
</div>
</div>
<p></p>
<p>-----------------------------------------------------------------------</p>
<p></p>
<p>You can unsubscribe by going to <a href="{!unsubscribeLink!}">link</a> and clicking the {!button!} button at the bottom of the page.</p>
<p></p>
<p>--</p>
<p>{{fMailer}} Mailer</p>
<p>(Do not reply to this message)</p>
</body>
</html>

View file

@ -1,12 +1,11 @@
Subject: Alert - New registration
User '<username>' registered in the forums at <fRootLink>
User '{!username!}' registered in the forums at {!fRootLink!}
User profile: <userLink>
User profile: {!userLink!}
To administer this account, please visit the following page:
<admin_url>
To administer this account, please visit the following page: {!admin_url!}
--
<fMailer> Mailer
{!fMailer!} Mailer
(Do not reply to this message)

View file

@ -1,12 +1,11 @@
Subject: New passphrase requested
Hello <username>,
Hello {!username!},
You have requested to have a new passphrase assigned to your account in the discussion forum at <fRootLink>
You have requested to have a new passphrase assigned to your account in the discussion forum at {!fRootLink!}
To change your passphrase, please visit the following page:
<link>
To change your passphrase, please visit the following page: {!link!}
--
<fMailer> Mailer
{!fMailer!} Mailer
(Do not reply to this message)

View file

@ -1,12 +1,12 @@
Subject: User account renamed
During an upgrade to the forums at <base_url> it was determined your username is too similar to an existing user. Your username has been changed accordingly.
During an upgrade to the forums at {!base_url!} it was determined your username is too similar to an existing user. Your username has been changed accordingly.
Old username: <old_username>
New username: <new_username>
Old username: {!old_username!}
New username: {!new_username!}
We apologise for any inconvenience caused.
--
<board_mailer> Mailer
{!board_mailer!} Mailer
(Do not reply to this message)

View file

@ -1,12 +1,11 @@
Subject: Welcome to <fTitle>!
Subject: Welcome to {!fTitle!}!
Thank you for registering in the forums at <fRootLink>.
Thank you for registering in the forums at {!fRootLink!}.
Your username: <username>
Your username: {!username!}
Go link to activate your account:
<link>
Go link to activate your account: {!link!}
--
<fMailer> Mailer
{!fMailer!} Mailer
(Do not reply to this message)

View file

@ -1,12 +1,11 @@
Subject: Запрос на смену почтового адреса
Здравствуйте, <username>.
Здравствуйте, {!username!}.
Кто-то, возможно вы, сделал запрос на смену почтового адреса аккаунта на форуме <fRootLink>. Если это не ваш запрос или вы передумали менять почтовый адрес аккаунта, то ни чего не делайте. Ваш почтовый адрес на форуме поменяется только, если вы посетите активационную ссылку. Чтобы активационная ссылка сработала, необходимо войти на форум под своими регистрационными данными.
Кто-то, возможно вы, сделал запрос на смену почтового адреса аккаунта на форуме {!fRootLink!}. Если это не ваш запрос или вы передумали менять почтовый адрес аккаунта, то ни чего не делайте. Ваш почтовый адрес на форуме поменяется только, если вы посетите активационную ссылку. Чтобы активационная ссылка сработала, необходимо войти на форум под своими регистрационными данными.
Чтобы сменить email адрес, вам нужно перейти по ссылке:
<link>
Чтобы сменить email адрес, вам нужно перейти по ссылке: {!link!}
--
Отправитель <fMailer>
(Не отвечайте на это сообщение)
Отправитель {!fMailer!}
(Не отвечайте на это сообщение)

View file

@ -1,9 +1,9 @@
Subject: Внимание - Обнаружен забаненный адрес email
Пользователь '<username>' изменил адрес email на забаненный: <email>
Пользователь {!username!} изменил адрес email на забаненный: {!email!}
Адрес профиля пользователя: <profile_url>
Адрес профиля пользователя: {!profile_url!}
--
Отправитель <board_mailer>
Отправитель {!board_mailer!}
(Не отвечайте на это сообщение)

View file

@ -1,9 +1,9 @@
Subject: Внимание - Обнаружен забаненный адрес email
Пользователь '<username>' оставил сообщение с указанием забаненного адреса email: <email>
Пользователь {!username!} оставил сообщение с указанием забаненного адреса email: {!email!}
Адрес сообщения: <post_url>
Адрес сообщения: {!post_url!}
--
Отправитель <board_mailer>
Отправитель {!board_mailer!}
(Не отвечайте на это сообщение)

View file

@ -1,9 +1,9 @@
Subject: Внимание - Обнаружен забаненный адрес email
Пользователь '<username>' зарегистрировался с указанием забаненного адреса email: <email>
Пользователь {!username!} зарегистрировался с указанием забаненного адреса email: {!email!}
Адрес профиля пользователя: <profile_url>
Адрес профиля пользователя: {!profile_url!}
--
Отправитель <board_mailer>
(Не отвечайте на это сообщение)
Отправитель {!board_mailer!}
(Не отвечайте на это сообщение)

View file

@ -1,9 +1,9 @@
Subject: Внимание - Обнаружено повторение адреса email
Пользователь '<username>' изменил адрес email на принадлежащий также: <dupe_list>
Пользователь {!username!} изменил адрес email на принадлежащий также: {!dupe_list!}
Адрес профиля пользователя: <profile_url>
Адрес профиля пользователя: {!profile_url!}
--
Отправитель <board_mailer>
(Не отвечайте на это сообщение)
Отправитель {!board_mailer!}
(Не отвечайте на это сообщение)

View file

@ -1,9 +1,9 @@
Subject: Внимание - Обнаружено повторение адреса email
Пользователь '<username>' зарегистрировался с указанием адреса email на принадлежащий также: <dupe_list>
Пользователь {!username!} зарегистрировался с указанием адреса email на принадлежащий также: {!dupe_list!}
Адрес профиля пользователя: <profile_url>
Адрес профиля пользователя: {!profile_url!}
--
Отправитель <board_mailer>
(Не отвечайте на это сообщение)
Отправитель {!board_mailer!}
(Не отвечайте на это сообщение)

View file

@ -1,15 +1,15 @@
Subject: <mailSubject>
Subject: {!mailSubject!}
Здравствуйте, <username>.
Здравствуйте, {!username!}.
<sender> с форума <fTitle> послал вам сообщение. Вы можете ответить <sender> напрямую на его e-mail, просто ответив на письмо.
Пользователь '{!sender!}' с форума '{!fTitle!}' послал вам сообщение. Вы можете ответить '{!sender!}' напрямую на его e-mail, просто ответив на письмо.
Само сообщение:
-----------------------------------------------------------------------
<mailMessage>
{!mailMessage!}
-----------------------------------------------------------------------
--
Отправитель <fMailer>
Отправитель {!fMailer!}

View file

@ -1,10 +1,10 @@
Subject: Новое личное сообщение: <mail_subject>
Subject: Новое личное сообщение: {!mail_subject!}
Здравствуйте, <user>!
Здравствуйте, {!user!}!
Участник <sender> форума <board_title> отправил Вам личное сообщение.
Сообщение можно прочитать по адресу <message_url>
Пользователь '{!sender!}' форума '{!board_title!}' отправил Вам личное сообщение.
Сообщение можно прочитать по адресу: {!message_url!}
--
Отправитель <board_mailer>
(Не отвечайте на это сообщение)
--
Отправитель {!board_mailer!}
(Не отвечайте на это сообщение)

View file

@ -1,11 +1,11 @@
Subject: Ответ в теме: '<topic_subject>'
Subject: Ответ в теме '{!topicSubject!}'
<replier> ответил в теме '<topic_subject>', на которую вы подписаны. Возможно есть и другие ответы, мы всего лишь рассылаем извещения о том, что стоит посетить форум снова.
Пользователь '{!replier!}' ответил в теме '{!topicSubject!}', на которую вы подписаны. Возможно есть и другие ответы, мы всего лишь рассылаем извещения о том, что стоит посетить форум снова.
Адрес сообщения <post_url>
Адрес сообщения: {!postLink!}
Вы можете снять подписку с темы перейдя по этой ссылке <unsubscribe_url> и нажав 'Отказаться от подписки' внизу страницы.
Вы можете снять подписку с темы '{!topicSubject!}' перейдя по этой ссылке {!unsubscribeLink!} и нажав кнопку '{!button!}' внизу страницы.
--
Отправитель <board_mailer>
Отправитель {!fMailer!}
(Не отвечайте на это сообщение)

View file

@ -1,18 +1,30 @@
Subject: Ответ в теме: '<topic_subject>'
Subject: Ответ в теме '{!topicSubject!}'
Content-Type: text/html; charset=UTF-8
<replier> ответил в теме '<topic_subject>', на которую вы подписаны. Возможно есть и другие ответы, мы всего лишь рассылаем извещения о том, что стоит посетить форум снова.
Адрес сообщения <post_url>
Само сообщение:
-----------------------------------------------------------------------
<message>
-----------------------------------------------------------------------
Вы можете снять подписку с темы перейдя по этой ссылке <unsubscribe_url> и нажав 'Отказаться от подписки' внизу страницы.
--
Отправитель <board_mailer>
(Не отвечайте на это сообщение)
<html lang="ru" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{topicSubject}}</title>
</head>
<body>
<p>Пользователь '{{replier}}' ответил в теме '<a href="{!postLink!}">{{topicSubject}}</a>', на которую вы подписаны. Возможно есть и другие ответы, мы всего лишь рассылаем извещения о том, что стоит посетить форум снова.</p>
<p></p>
<p>Само сообщение:</p>
<p>-----------------------------------------------------------------------</p>
<p></p>
<div class="f-post-body">
<div class="f-post-main">
<p>{!message!}</p>
</div>
</div>
<p></p>
<p>-----------------------------------------------------------------------</p>
<p></p>
<p>Вы можете снять подписку с темы '{{topicSubject}}' перейдя по <a href="{!unsubscribeLink!}">этой ссылке</a> и нажав кнопку '{!button!}' внизу страницы.</p>
<p></p>
<p>--</p>
<p>Отправитель {{fMailer}}</p>
<p>(Не отвечайте на это сообщение)</p>
</body>
</html>

View file

@ -1,9 +1,9 @@
Subject: Сигнал(<forumId>) - '<topicSubject>'
Subject: Сигнал ({!forumId!}) - '{!topicSubject!}'
Пользователь '<username>' отправил сигнал на сообщение: <postLink>
Пользователь '{!username!}' отправил сигнал на сообщение: {!postLink!}
Причина: <reason>
Причина: {!reason!}
--
Отправитель <fMailer>
Отправитель {!fMailer!}
(Не отвечайте на это сообщение)

View file

@ -1,11 +1,11 @@
Subject: Новая тема в разделе: '<forum_name>'
Subject: Новая тема в разделе '{!forumName!}'
<poster> создал новую тему '<topic_subject>' в разделе '<forum_name>', на который вы подписаны.
Пользователь '{!poster!}' создал новую тему '{!topicSubject!}' в разделе '{!forumName!}', на который вы подписаны.
Адрес новой темы <topic_url>
Адрес новой темы: {!topicLink!}
Вы можете снять подписку с раздела перейдя по этой ссылке <unsubscribe_url> и нажав 'Отказаться от подписки' внизу страницы.
Вы можете снять подписку с раздела '{!forumName!}' перейдя по этой ссылке {!unsubscribeLink!} и нажав кнопку '{!button!}' внизу страницы.
--
Отправитель <board_mailer>
Отправитель {!fMailer!}
(Не отвечайте на это сообщение)

View file

@ -1,18 +1,30 @@
Subject: Новая тема в разделе: '<forum_name>'
Subject: Новая тема в разделе '{!forumName!}'
Content-Type: text/html; charset=UTF-8
<poster> создал новую тему '<topic_subject>' в разделе '<forum_name>', на который вы подписаны.
Адрес новой темы <topic_url>
Само сообщение:
-----------------------------------------------------------------------
<message>
-----------------------------------------------------------------------
Вы можете снять подписку с раздела перейдя по этой ссылке <unsubscribe_url> и нажав 'Отказаться от подписки' внизу страницы.
--
Отправитель <board_mailer>
(Не отвечайте на это сообщение)
<html lang="ru" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{topicSubject}}</title>
</head>
<body>
<p>Пользователь '{{poster}}' создал новую тему '<a href="{!topicLink!}">{{topicSubject}}</a>' в разделе '{{forumName}}', на который вы подписаны.</p>
<p></p>
<p>Само сообщение:</p>
<p>-----------------------------------------------------------------------</p>
<p></p>
<div class="f-post-body">
<div class="f-post-main">
<p>{!message!}</p>
</div>
</div>
<p></p>
<p>-----------------------------------------------------------------------</p>
<p></p>
<p>Вы можете снять подписку с раздела '{{forumName}}' перейдя по <a href="{!unsubscribeLink!}">этой ссылке</a> и нажав кнопку '{!button!}' внизу страницы.</p>
<p></p>
<p>--</p>
<p>Отправитель {{fMailer}}</p>
<p>(Не отвечайте на это сообщение)</p>
</body>
</html>

View file

@ -1,12 +1,11 @@
Subject: Внимание - Новая регистрация
Пользователь '<username>' зарегистрировался на форуме по адресу <fRootLink>
Пользователь '{!username!}' зарегистрировался на форуме по адресу {!fRootLink!}
Адрес профиля пользователя: <userLink>
Адрес профиля пользователя: {!userLink!}
Для управления этой учетной записью, пожалуйста, посетите следующую страницу:
<admin_url>
Для управления этой учетной записью, пожалуйста, посетите следующую страницу: {!admin_url!}
--
Отправитель <fMailer>
Отправитель {!fMailer!}
(Не отвечайте на это сообщение)

View file

@ -1,12 +1,11 @@
Subject: Запрос на смену кодовой фразы
Здравствуйте, <username>.
Здравствуйте, {!username!}.
Кто-то, возможно вы, сделал запрос на смену кодовой фразы аккаунта на форуме <fRootLink>
Кто-то, возможно вы, сделал запрос на смену кодовой фразы аккаунта на форуме {!fRootLink!}
Чтобы сменить кодовую фразу, вам нужно перейти по ссылке:
<link>
Чтобы сменить кодовую фразу, вам нужно перейти по ссылке: {!link!}
--
Отправитель <fMailer>
Отправитель {!fMailer!}
(Не отвечайте на это сообщение)

View file

@ -1,12 +1,12 @@
Subject: Учетная запись пользователя переименована
Во время обновления форума по адресу <base_url> было решено, что Ваше имя пользователя слишком похоже на имя другого участника форума. Ваше имя пользователя было изменено.
Во время обновления форума по адресу {!base_url!} было решено, что Ваше имя пользователя слишком похоже на имя другого участника форума. Ваше имя пользователя было изменено.
Старое имя: <old_username>
Новое имя: <new_username>
Старое имя: {!old_username!}
Новое имя: {!new_username!}
Мы приносим извинения за это неудобство.
--
Отправитель <board_mailer>
Отправитель {!board_mailer!}
(Не отвечайте на это сообщение)

View file

@ -1,12 +1,11 @@
Subject: Добро пожаловать на <fTitle>!
Subject: Добро пожаловать на {!fTitle!}!
Добро пожаловать на форум по адресу <fRootLink>.
Добро пожаловать на форум по адресу {!fRootLink!}
Ваше имя пользователя: <username>
Ваше имя пользователя: {!username!}
Перейдите по ссылке, чтобы активировать аккаунт:
<link>
Перейдите по ссылке, чтобы активировать аккаунт: {!link!}
--
Отправитель <fMailer>
Отправитель {!fMailer!}
(Не отвечайте на это сообщение)

View file

@ -1,4 +1,4 @@
# ForkBB rev 12 Pre-Alpha Readme
# ForkBB rev 13 Pre-Alpha Readme
## About