diff --git a/Gemfile b/Gemfile
index 8c3b5db..e7117a8 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1 +1,2 @@
gem 'slim-rails'
+gem 'validate_url'
diff --git a/app/controllers/messenger_settings_controller.rb b/app/controllers/messenger_settings_controller.rb
index 0e06493..0f14dd3 100644
--- a/app/controllers/messenger_settings_controller.rb
+++ b/app/controllers/messenger_settings_controller.rb
@@ -3,13 +3,44 @@ class MessengerSettingsController < ApplicationController
before_action :authorize
def update
- setting = MessengerSetting.find_or_create @project.id
- setting.assign_attributes(params[:setting])
- if setting.save
+ setting = MessengerSetting.find_or_create(@project.id)
+ if setting.update(allowed_params)
flash[:notice] = l(:notice_successful_update)
+ redirect_to settings_project_path(@project, tab: 'messenger')
else
- flash[:error] = 'Updating failed.' + e.message
+ flash[:error] = setting.errors.full_messages.flatten.join("\n")
+ respond_to do |format|
+ format.html { redirect_back_or_default(settings_project_path(@project, tab: 'messenger')) }
+ format.api { render_validation_errors(setting) }
+ end
end
- redirect_to settings_project_path(@project, tab: 'messenger')
+ end
+
+ private
+
+ def allowed_params
+ params.require(:setting).permit :messenger_url,
+ :messenger_icon,
+ :messenger_channel,
+ :messenger_username,
+ :messenger_verify_ssl,
+ :auto_mentions,
+ :default_mentions,
+ :display_watchers,
+ :post_updates,
+ :new_include_description,
+ :updated_include_description,
+ :post_private_issues,
+ :post_private_notes,
+ :post_wiki,
+ :post_wiki_updates,
+ :post_db,
+ :post_db_updates,
+ :post_private_db,
+ :post_contact,
+ :post_contact_updates,
+ :post_private_contacts,
+ :post_password,
+ :post_password_updates
end
end
diff --git a/app/models/messenger_setting.rb b/app/models/messenger_setting.rb
index 952840c..3a76e74 100644
--- a/app/models/messenger_setting.rb
+++ b/app/models/messenger_setting.rb
@@ -1,32 +1,7 @@
class MessengerSetting < ActiveRecord::Base
- include Redmine::SafeAttributes
belongs_to :project
- safe_attributes 'messenger_url',
- 'messenger_icon',
- 'messenger_channel',
- 'messenger_username',
- 'messenger_verify_ssl',
- 'auto_mentions',
- 'default_mentions',
- 'display_watchers',
- 'post_updates',
- 'new_include_description',
- 'updated_include_description',
- 'post_private_issues',
- 'post_private_notes',
- 'post_wiki',
- 'post_wiki_updates',
- 'post_db',
- 'post_db_updates',
- 'post_private_db',
- 'post_contact',
- 'post_contact_updates',
- 'post_private_contacts',
- 'post_password',
- 'post_password_updates'
-
- attr_protected :id, :project_id
+ validates :messenger_url, url: { allow_blank: true, message: l(:error_messenger_invalid_url) }
def self.find_or_create(p_id)
setting = MessengerSetting.find_by(project_id: p_id)
diff --git a/config/locales/de.yml b/config/locales/de.yml
index afcd30e..1e6b549 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -1,6 +1,7 @@
# German strings
de:
- permission_manage_messenger: Messenger verwalten
+ default_mentionsl_info: Benutzer, die immer mit Mentions benachrichtet werden sollen. Mehrere Namen können mit Komma getrennt angegeben werden (z.B. @all, @here).
+ error_messenger_invalid_url: "ist keine gültige URL"
label_messenger_contact_created: "[%{project_url}] Kontakt %{url} erstellt von *%{user}*"
label_messenger_contact_updated: "[%{project_url}] Kontakt %{url} aktualisiert von *%{user}*"
label_messenger_db_entry_created: "[%{project_url}] DB Eintrag %{url} erstellt von *%{user}*"
@@ -11,6 +12,7 @@ de:
label_messenger_password_created: "[%{project_url}] Kennwort %{url} erstellt von *%{user}*"
label_messenger_password_updated: "[%{project_url}] Kennwort %{url} aktualisiert von *%{user}*"
label_messenger_project_text_field_info: Leer lassen für Systemstandard.
+ label_messenger_setting: Messenger Einstellung
label_messenger_settings_default: Standardeinstellung
label_messenger_settings_disabled: Deaktiviert
label_messenger_settings_enabled: Aktiviert
@@ -32,8 +34,8 @@ de:
label_settings_post_db: Neue DB Einträge?
label_settings_post_password_updates: Passwort Updates?
label_settings_post_password: Neue Passwörter?
- label_settings_post_private_db: Private DB Einträge?
label_settings_post_private_contacts: Private Kontakte?
+ label_settings_post_private_db: Private DB Einträge?
label_settings_post_private_issues: Private Ticket Updates?
label_settings_post_private_notes: Private Notizen?
label_settings_post_updates: Ticket Updates?
@@ -50,5 +52,4 @@ de:
messenger_url_info_html: 'Generiere eine Incoming WebHook URL vom Messenger Service. Um nur aus bestimmten Projekten Nachrichten zu versenden, kann diese URL leer bleiben und in den Projekteinstellungen gesetzt werden.'
messenger_verify_ssl_info_html: 'Falls der Messenger Service ein ungültiges oder selbst erstelltes (self-signed) SSL Zertifikat verwendet bitte deaktivieren.'
messenger_wiki_intro: Legen Sie fest welche Einträge oder Änderungen für Wikis im angegebenen Messenger Channel versendet werden.
- label_messenger_setting: Messenger Einstellung
- default_mentionsl_info: Benutzer, die immer mit Mentions benachrichtet werden sollen. Mehrere Namen können mit Komma getrennt angegeben werden (z.B. @all, @here).
+ permission_manage_messenger: Messenger verwalten
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 333fc27..3c742c9 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -1,6 +1,7 @@
# English strings
en:
- permission_manage_messenger: Manage messenger
+ default_mentionsl_info: Default people to notify, comma separated (e.g. @all, @here)
+ error_messenger_invalid_url: is not a valid URL
label_messenger_contact_created: "[%{project_url}] Contact %{url} created by *%{user}*"
label_messenger_contact_updated: "[%{project_url}] Contact %{url} updated by *%{user}*"
label_messenger_db_entry_created: "[%{project_url}] DB entry %{url} created by *%{user}*"
@@ -11,6 +12,7 @@ en:
label_messenger_password_created: "[%{project_url}] Kennwort %{url} created by *%{user}*"
label_messenger_password_updated: "[%{project_url}] Kennwort %{url} updated by *%{user}*"
label_messenger_project_text_field_info: Leave it blank for system default.
+ label_messenger_setting: Messenger Settings
label_messenger_settings_default: System default
label_messenger_settings_disabled: Disabled
label_messenger_settings_enabled: Enabled
@@ -32,8 +34,8 @@ en:
label_settings_post_db: DB entry added?
label_settings_post_password_updates: Password updates?
label_settings_post_password: Password added?
- label_settings_post_private_db: Private DB entries?
label_settings_post_private_contacts: Private contacts?
+ label_settings_post_private_db: Private DB entries?
label_settings_post_private_issues: Private issue updates?
label_settings_post_private_notes: Private notes updates?
label_settings_post_updates: Issue updates?
@@ -50,5 +52,4 @@ en:
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_wiki_intro: Activate the changes for Wikis that should be sent to the pre-defined Messenger channel.
- label_messenger_setting: Messenger Settings
- default_mentionsl_info: Default people to notify, comma separated (e.g. @all, @here)
+ permission_manage_messenger: Manage messenger
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 3e953af..6f0b942 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -1,6 +1,7 @@
# Japanese strings
ja:
- permission_manage_messenger: メッセンジャーの管理
+ default_mentionsl_info: Default people to notify, comma separated (e.g. @all, @here)
+ error_messenger_invalid_url: is not a valid URL
label_messenger_contact_created: "[%{project_url}] コンタクト %{url} が *%{user}* によって作成されました。"
label_messenger_contact_updated: "[%{project_url}] コンタクト %{url} が*%{user}* によって更新されました。"
label_messenger_db_entry_created: "[%{project_url}] DB entry %{url} created by *%{user}*"
@@ -11,6 +12,7 @@ ja:
label_messenger_password_created: "[%{project_url}] Kennwort %{url} created by *%{user}*"
label_messenger_password_updated: "[%{project_url}] Kennwort %{url} updated by *%{user}*"
label_messenger_project_text_field_info: デフォルトの設定を使う場合空欄にしてください。
+ label_messenger_setting: メッセンジャーの設定
label_messenger_settings_default: デフォルト
label_messenger_settings_disabled: 無効
label_messenger_settings_enabled: 有効
@@ -32,8 +34,8 @@ ja:
label_settings_post_db: DB entry added?
label_settings_post_password_updates: Password updates?
label_settings_post_password: Password added?
- label_settings_post_private_db: Private DB entries?
label_settings_post_private_contacts: Private contacts?
+ label_settings_post_private_db: Private DB entries?
label_settings_post_private_issues: プライベートチケットの更新
label_settings_post_private_notes: プライベート注記の更新
label_settings_post_updates: チケットの更新
@@ -50,5 +52,4 @@ ja:
messenger_url_info_html: 'メッセンジャー サービスで 内向きのウェブフックのURLを作成して下さい。プロジェクト毎に設定を変えたい場合は空欄として下さい。'
messenger_verify_ssl_info_html: 'メッセンジャー サービスが自己署名証明書や不正な証明書を使っている場合、無効として下さい。'
messenger_wiki_intro: メッセンジャーに送信するWikiのイベントにチェックを入れて下さい。
- label_messenger_setting: メッセンジャーの設定
- default_mentionsl_info: Default people to notify, comma separated (e.g. @all, @here)
+ permission_manage_messenger: メッセンジャーの管理