Skip to content
This repository was archived by the owner on Jul 14, 2025. It is now read-only.
16 changes: 16 additions & 0 deletions app/mailers/assign_mailer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
require_dependency 'email/message_builder'

class AssignMailer < ActionMailer::Base
include Email::BuildEmailHelper

def send_assignment(to_address, topic, assigned_by)
opts = {
template: 'assign_mailer',
topic_title: topic.title,
assignee_name: assigned_by.username,
topic_excerpt: topic.excerpt,
topic_link: "#{Discourse.base_url}/t/#{topic.slug}"
}
build_email(to_address, opts)
end
end
23 changes: 23 additions & 0 deletions config/locales/client.ru.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
ru:
js:
action_codes:
assigned: "назначил(а) ответственного %{who} %{when}"
unassigned: "снял(а) ответственного %{who} %{when}"
discourse_assign:
cant_act: "Вы не можете управлять флагами в теме, которая назначена на другого сотрудника"
assigned: "Назначенные темы"
assigned_to: "Назначено на"
assign_notification: "<i title='назначено' class='fa fa-user-plus'></i><p><span>{{username}}</span> {{description}}</p>"
unassign:
title: "Снять отв."
help: "Снять ответственного с темы"
assign:
title: "Назначить отв."
help: "Назначить ответственного за тему"
assign_modal:
title: "Назначьте ответственного в теме"
description: "Введите имя сотрудника, ответственного за тему"
assign: "Назначить"
claim:
title: "Пожаловаться"
help: "Назначить на себя"
12 changes: 12 additions & 0 deletions config/locales/server.en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,20 @@ en:
unassign_on_group_archive: "When a message is archived by a group, unassign message (reassign if moved back to inbox)"
unassign_on_close: "When a topic is closed unassign topic"
assign_locks_flags: "When a topic is assigned to a staff member, its flags can only be handled by that person"
assign_mailer_enabled: "When enabled, the assigned user will receive a notification email on each assignment"
discourse_assign:
assigned_to: "Topic assigned to @%{username}"
unassigned: "Topic was unassigned"
already_claimed: "That topic has already been claimed."
flag_assigned: "Sorry, flag's topic is assigned to another user"
assign_mailer:
title: "Assign Mailer"
subject_template: "[%{email_prefix}] %{assignee_name} assigned you to '%{topic_title}'!"
text_body_template: |
Hey, %{assignee_name} **assigned** you to a discussion
> **%{topic_title}**
>
> %{topic_excerpt}

If you're interested, click the link below:
[%{topic_link}](%{topic_link})
29 changes: 29 additions & 0 deletions config/locales/server.ru.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
ru:
site_settings:
assign_enabled: "Включить возможность назначить ответственного за топик"
assigns_public: "Разрешить обычным пользователям видеть, на кого назначена тема"
assigns_user_url_path: "Путь к назначенным темам (используйте: {username} для подстановки имени)"
assigns_by_staff_mention: "Когда кто-то из персонала упоминает другого сотрудника в теме, то она закрепляется за тем сотрудником"
unassign_creates_tracking_post: "Когда включено, то при снятии ответственного с темы создается whisper (скрытый пост), чтобы можно было отследить изменение в топике"
assign_self_regex: "Шаблон, по которому топик будет автоматически закрепляться за текущим пользователем. Например, 'мой список'"
assign_other_regex: "Шаблон, по которому назначение будет происходить автоматически на сотрудника через @упоминание. Например, 'твой список'"
unassign_on_group_archive: "When a message is archived by a group, unassign message (reassign if moved back to inbox)"
unassign_on_close: "Снимать ответственного с темы, когда она закрывается"
assign_locks_flags: "Когда топик назначен на сотрудника, то флаги топика может редактировать только ответственный"
assign_mailer_enabled: "Когда включено, то при назначении ответственного за тему сотрудник получит письмо"
discourse_assign:
assigned_to: "Тема назначена на @%{username}"
unassigned: "Ответственный снят"
already_claimed: "На эту тему уже жаловались."
flag_assigned: "Извините, эта тема уже назначена на другого сотрудника."
assign_mailer:
title: "Assign Mailer"
subject_template: "[%{email_prefix}] %{assignee_name} назначил(а) Вас ответственным в теме '%{topic_title}'!"
text_body_template: |
Хэй, %{assignee_name} **назначил(а)** Вас ответственным в теме
> **%{topic_title}**
>
> %{topic_excerpt}

Если Вам интересно, то перейдите по ссылке ниже:
[%{topic_link}](%{topic_link})
1 change: 1 addition & 0 deletions config/settings.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,4 @@ plugins:
assign_locks_flags:
default: true
client: true
assign_mailer_enabled: false
9 changes: 9 additions & 0 deletions lib/topic_assigner.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
require_dependency 'email/sender'

class ::TopicAssigner
def self.backfill_auto_assign
staff_mention = User.where('moderator OR admin')
Expand Down Expand Up @@ -110,6 +112,13 @@ def assign(assign_to, silent: false)
user_ids: staff_ids
)

if SiteSetting.assign_mailer_enabled
if !@topic.muted?(assign_to)
message = AssignMailer.send_assignment(assign_to.email, @topic, @assigned_by)
Email::Sender.new(message, :assign_message).send
end
end

UserAction.log_action!(
action_type: UserAction::ASSIGNED,
user_id: assign_to.id,
Expand Down