From f4382f7d8603cc289989a648473d9567a94afb92 Mon Sep 17 00:00:00 2001 From: Igor Pronin Date: Thu, 20 Aug 2020 11:37:10 +0300 Subject: [PATCH] Added feature to send messages directly to users to be notified Added setting to enable this feature. Tested on RocketChatIntegration --- README.md | 1 + app/controllers/messenger_settings_controller.rb | 1 + app/views/messenger_settings/_show.html.slim | 1 + app/views/settings/_messenger_settings.html.slim | 4 ++++ config/locales/en.yml | 2 ++ db/migrate/004_add_direct_messages.rb | 5 +++++ init.rb | 1 + lib/redmine_messenger/patches/issue_patch.rb | 16 ++++++++++++++++ 8 files changed, 31 insertions(+) create mode 100644 db/migrate/004_add_direct_messages.rb diff --git a/README.md b/README.md index 8d479d5..e299671 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ Features * post db entry (if redmine_db is installed) updates * post password (if redmine_passwords is installed) updates * post contact (if redmine_contacts is installed) updates +* Post information directly to users to be notified (users names should be the same in Redmine and chat). Tested with Rocket.Chat * overwrite messenger settings at project level * parent project support (inherit messenger settings from parent project) * multiple channel support (define one or more channels to deliver note) diff --git a/app/controllers/messenger_settings_controller.rb b/app/controllers/messenger_settings_controller.rb index 68cb6f6..70f6f24 100644 --- a/app/controllers/messenger_settings_controller.rb +++ b/app/controllers/messenger_settings_controller.rb @@ -24,6 +24,7 @@ class MessengerSettingsController < ApplicationController :messenger_channel, :messenger_username, :messenger_verify_ssl, + :messenger_direct_users_messages, :auto_mentions, :default_mentions, :display_watchers, diff --git a/app/views/messenger_settings/_show.html.slim b/app/views/messenger_settings/_show.html.slim index 38a25ed..79560b8 100644 --- a/app/views/messenger_settings/_show.html.slim +++ b/app/views/messenger_settings/_show.html.slim @@ -27,6 +27,7 @@ = render partial: 'messenger_settings/messenger_text', locals: { f: f, mf: :messenger_channel, size: 30 } = render partial: 'messenger_settings/messenger_text', locals: { f: f, mf: :messenger_username, size: 30 } = render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :messenger_verify_ssl } + = render partial: 'messenger_settings/messenger_select', locals: { f: f, mf: :messenger_direct_users_messages } fieldset#messenger_settings.box.tabular legend = l(:label_issue_plural) diff --git a/app/views/settings/_messenger_settings.html.slim b/app/views/settings/_messenger_settings.html.slim index d1bb454..deb5802 100644 --- a/app/views/settings/_messenger_settings.html.slim +++ b/app/views/settings/_messenger_settings.html.slim @@ -21,6 +21,10 @@ fieldset#messenger_settings.box.tabular = tag.label l(:label_settings_messenger_verify_ssl) = check_box_tag 'settings[messenger_verify_ssl]', 1, @settings[:messenger_verify_ssl].to_i == 1 em.info = t(:messenger_verify_ssl_info_html) + p + = tag.label l(:label_settings_messenger_direct_users_messages) + = check_box_tag 'settings[messenger_direct_users_messages]', 1, @settings[:messenger_direct_users_messages].to_i == 1 + em.info = t(:messenger_direct_users_messages_info_html) fieldset#messenger_settings.box.tabular legend = l(:label_issue_plural) diff --git a/config/locales/en.yml b/config/locales/en.yml index ed55a01..e509449 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -28,6 +28,7 @@ en: label_settings_messenger_url: Messenger URL label_settings_messenger_username: Messenger username label_settings_messenger_verify_ssl: Verify SSL + label_settings_messenger_direct_users_messages: Send direct messages label_settings_new_include_description: New issue description? label_settings_post_contact_updates: Contact updates? label_settings_post_contact: Contact added? @@ -52,5 +53,6 @@ en: messenger_settings_project_intro: "If you left empty the Messenger URL in the administration area in case to be not globally notified by all project changes you can configure your Messenger URL in the project settings." messenger_url_info_html: 'Generate an Incoming WebHook URL from the messenger service. Leave it empty, if you only want to activate specific projects with project based settings' messenger_verify_ssl_info_html: 'If your Messenger service uses an invalid or self-signed SSL certificate, disable it.' + messenger_direct_users_messages_info_html: 'If enabled Messenger will post http requests to each user as channel(direct message in RocketChat) along with post in channel' messenger_wiki_intro: Activate the changes for Wikis that should be sent to the pre-defined Messenger channel. permission_manage_messenger: Manage messenger diff --git a/db/migrate/004_add_direct_messages.rb b/db/migrate/004_add_direct_messages.rb new file mode 100644 index 0000000..89fa9b9 --- /dev/null +++ b/db/migrate/004_add_direct_messages.rb @@ -0,0 +1,5 @@ +class AddDirectMessages < ActiveRecord::Migration[4.2] + def change + add_column :messenger_settings, :messenger_direct_users_messages, :integer, default: 0, null: false + end +end diff --git a/init.rb b/init.rb index 41efda4..b54ae4c 100644 --- a/init.rb +++ b/init.rb @@ -18,6 +18,7 @@ Redmine::Plugin.register :redmine_messenger do messenger_channel: 'redmine', messenger_username: 'robot', messenger_verify_ssl: '1', + messenger_direct_users_messages: '0', auto_mentions: '0', default_mentions: '', display_watchers: '0', diff --git a/lib/redmine_messenger/patches/issue_patch.rb b/lib/redmine_messenger/patches/issue_patch.rb index 5e76208..fc43764 100644 --- a/lib/redmine_messenger/patches/issue_patch.rb +++ b/lib/redmine_messenger/patches/issue_patch.rb @@ -15,6 +15,14 @@ module RedmineMessenger channels = Messenger.channels_for_project project url = Messenger.url_for_project project + if Messenger.setting_for_project(project, :messenger_direct_users_messages) + notified_users.each do |user| + if user.login != author.login + channels.append('@' + user.login) + end + end + end + return unless channels.present? && url return if is_private? && !Messenger.setting_for_project(project, :post_private_issues) @@ -62,6 +70,14 @@ module RedmineMessenger channels = Messenger.channels_for_project project url = Messenger.url_for_project project + + if Messenger.setting_for_project(project, :messenger_direct_users_messages) + notified_users.each do |user| + if user.login != current_journal.user.login + channels.append('@' + user.login) + end + end + end return unless channels.present? && url && Messenger.setting_for_project(project, :post_updates) return if is_private? && !Messenger.setting_for_project(project, :post_private_issues)