From 5758486167ca133e5749eb1ff9aeaa4f01b83e98 Mon Sep 17 00:00:00 2001 From: spog163 <32743709+spog163@users.noreply.github.com> Date: Tue, 21 Nov 2017 08:09:08 +0400 Subject: [PATCH] Added email notification on topic assignment (#9) * Added email notification on topic assignment * Added config options for assign mailer * Add Russian translation * Update server.ru.yml * Create client.ru.yml * Update server.ru.yml * Update client.ru.yml * Update client.ru.yml * Update client.ru.yml * Update server.en.yml * Removed override option for muted topics --- app/mailers/assign_mailer.rb | 16 ++++++++++++++++ config/locales/client.ru.yml | 23 +++++++++++++++++++++++ config/locales/server.en.yml | 12 ++++++++++++ config/locales/server.ru.yml | 29 +++++++++++++++++++++++++++++ config/settings.yml | 1 + lib/topic_assigner.rb | 9 +++++++++ 6 files changed, 90 insertions(+) create mode 100644 app/mailers/assign_mailer.rb create mode 100644 config/locales/client.ru.yml create mode 100644 config/locales/server.ru.yml diff --git a/app/mailers/assign_mailer.rb b/app/mailers/assign_mailer.rb new file mode 100644 index 0000000..3b92c6b --- /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 0000000..1534031 --- /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 8b730b6..300bdb9 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 0000000..f70dd08 --- /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 ab5c385..4a63fc9 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 94e6489..628d1d0 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 @@ SQL 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,