diff --git a/app/mailers/assign_mailer.rb b/app/mailers/assign_mailer.rb new file mode 100644 index 00000000..3b92c6b9 --- /dev/null +++ b/app/mailers/assign_mailer.rb @@ -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 diff --git a/config/locales/client.ru.yml b/config/locales/client.ru.yml new file mode 100644 index 00000000..15340313 --- /dev/null +++ b/config/locales/client.ru.yml @@ -0,0 +1,23 @@ +ru: + js: + action_codes: + assigned: "назначил(а) ответственного %{who} %{when}" + unassigned: "снял(а) ответственного %{who} %{when}" + discourse_assign: + cant_act: "Вы не можете управлять флагами в теме, которая назначена на другого сотрудника" + assigned: "Назначенные темы" + assigned_to: "Назначено на" + assign_notification: "

{{username}} {{description}}

" + unassign: + title: "Снять отв." + help: "Снять ответственного с темы" + assign: + title: "Назначить отв." + help: "Назначить ответственного за тему" + assign_modal: + title: "Назначьте ответственного в теме" + description: "Введите имя сотрудника, ответственного за тему" + assign: "Назначить" + claim: + title: "Пожаловаться" + help: "Назначить на себя" diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index 8b730b62..300bdb9a 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -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}) diff --git a/config/locales/server.ru.yml b/config/locales/server.ru.yml new file mode 100644 index 00000000..f70dd083 --- /dev/null +++ b/config/locales/server.ru.yml @@ -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}) diff --git a/config/settings.yml b/config/settings.yml index ab5c385e..4a63fc98 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -15,3 +15,4 @@ plugins: assign_locks_flags: default: true client: true + assign_mailer_enabled: false diff --git a/lib/topic_assigner.rb b/lib/topic_assigner.rb index 94e64895..628d1d0c 100644 --- a/lib/topic_assigner.rb +++ b/lib/topic_assigner.rb @@ -1,3 +1,5 @@ +require_dependency 'email/sender' + class ::TopicAssigner def self.backfill_auto_assign staff_mention = User.where('moderator OR admin') @@ -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,